Code Thanks Festival B
12月14日(日)、Code Thanks Festival B日程に参加してきました。
勉強会と被ってた & テスト期間が先週まで続いていた & レポートがやばかったのでほとんど準備らしい準備はできずに参加しました。
問題
A問題
int main() { ios_base::sync_with_stdio(0); int A, B; cin >> A >> B; cout << max(A, B) << endl; }
B問題
int main() { ios_base::sync_with_stdio(0); int A, B, C; cin >> A >> B >> C; int D = max(A+B, A*B); cout << max(D*C, D+C) << endl; }
C問題
int main() { ios_base::sync_with_stdio(0); int N, ans = 0; cin >> N; vector<int> v(N); for(int i = 0; i < N; i++) { cin >> v[i]; } int a; for(int i = 0; i < N; i++) { cin >> a; if(v[i] / 2 < a) { ans++; } } cout << ans << endl; }
D問題
int d[1001]; int main() { ios_base::sync_with_stdio(0); int N, T, A; cin >> N >> T; int ans = 0; for(int i = 0; i < N; i++) { cin >> A; for(int j = 1; ; j++) { if(j * A > T) break; d[j*A]++; ans = max(ans, d[j*A]); } } cout << ans << endl; }
E問題
typedef pair<int,int> P; int R, C, N; int field[50][50]; bool ok[50][50]; int x[4] = {0, 1, 0 , -1}; int y[4] = {1, 0 , -1, 0}; int main() { ios_base::sync_with_stdio(0); P s, g; cin >> R >> C; cin >> s.first >> s.second; cin >> g.first >> g.second; s.first--, s.second--; g.first--,g.second--; cin >> N; memset(field, -1, sizeof field); int r, c, h, w; for(int i = 0; i < N; i++) { cin >> r >> c >> h >> w; r--, c--; for(int y = 0; y < h; y++) { for(int x = 0; x < w; x++) { ok[r+y][c+x] = true; } } } for(int i = 0; i < R; i++) { for(int j = 0; j < C; j++) { field[i][j] = -1; } } queue<P> que; if(ok[s.first][s.second]) { field[s.first][s.second] = 0; que.push(s); } for(; !que.empty(); que.pop()) { P p = que.front(); if(p.first == g.first && p.second == g.second) { cout << "YES" << endl; return 0; } for(int i = 0; i < 4; i++) { int ny = p.first + y[i]; int nx = p.second + x[i]; if(0 <= nx && nx < C && 0 <= ny && ny < R && ok[ny][nx] && field[ny][nx] < 0) { field[ny][nx] = field[p.first][p.second] + 1; que.push(make_pair(ny,nx)); } } } cout << "NO" << endl; }
F問題
const long long MOD = 1000000007; long long dp[1001]; int main() { ios_base::sync_with_stdio(0); string X, S, T; cin >> X >> S >> T; int ans = 0; dp[0] =1; for(int i = 0; i < X.size(); i++) { bool f = true; for(int j = 0; j < S.size(); j++) { if(X[i+j]!=S[j]) { f = false; break; } } if(f) { (dp[i+S.size()] += dp[i]) %= MOD; } f = true; for(int k = 0; k < T.size(); k++) { if(X[i+k]!=T[k]) { f = false; break; } } if(f) { (dp[i+T.size()] += dp[i]) %= MOD; } } cout << dp[X.size()] << endl; }
G問題
int dp[501][501]; bool solve(int n, int p) { if(dp[n][p] != -1) return dp[n][p]; if(n <= p) return dp[n][p] = true; bool res = false; for(int i = 1; i <= min(n, p); i++) { if(!solve(n-i, i+1)) { res = true; break; } } return dp[n][p] = res; } int main() { int N, P; cin >> N >> P; for(int i = 0; i <= N; i++) for(int j = 0; j <= N; j++) dp[i][j]=-1; cout << (solve(N, P) ? "first" : "second") << endl; }
H問題
解いてない