結果
36分22秒(3WA)で全完。89位。WAが多すぎた。
A問題
場合を分ける。
#include"bits/stdc++.h" using namespace std; using ll = int64_t; int main() { ll N; cin >> N; if (N == 1) { cout << "Hello World" << endl; } else { ll A, B; cin >> A >> B; cout << A + B << endl; } }
B問題
であるものの中での最小を取る。
#include"bits/stdc++.h" using namespace std; using ll = int64_t; int main() { ll N, T; cin >> N >> T; ll ans = INT_MAX; for (ll i = 0; i < N; i++) { ll c, t; cin >> c >> t; if (t <= T) { ans = min(ans, c); } } if (ans == INT_MAX) { cout << "TLE" << endl; } else { cout << ans << endl; } }
C問題
とについて全探索する。そのときにまずをどれかで決定しておき、その他について全部試してみて矛盾が生じないかを確認する。確認の式が間違っていて2回WAを出した。
#include"bits/stdc++.h" using namespace std; using ll = int64_t; int main() { ll N; cin >> N; vector<ll> x(N), y(N), h(N); for (ll i = 0; i < N; i++) { cin >> x[i] >> y[i] >> h[i]; } for (ll cx = 0; cx <= 100; cx++) { for (ll cy = 0; cy <= 100; cy++) { ll H = -1; for (ll i = 0; i < N; i++) { if (h[i] != 0) { H = h[i] + abs(cx - x[i]) + abs(cy - y[i]); break; } } assert(H != -1); bool ok = true; for (ll i = 0; i < N; i++) { if (h[i] != max(H - abs(cx - x[i]) - abs(cy - y[i]), (ll)0)) { ok = false; break; } } if (ok) { cout << cx << " " << cy << " " << H << endl; return 0; } } } }
D問題
は正の整数としてという形に分解できたとき、なら少なくとも個を、残り1個をとすれば全ての倍数となるから最大公約数はになり得る。を逆にしたものについても同じことが成り立つ。
をからまで回していって割り切れたら上の検証を行えばよい。計算量はなので間に合う。というコーナーケースにハマって1WA。
#include"bits/stdc++.h" using namespace std; using ll = int64_t; int main() { ll N, M; cin >> N >> M; if (N == 1) { cout << M << endl; return 0; } ll ans = 1; for (ll i = 2; i * i <= M; i++) { if (M % i == 0) { if (i >= N) { ans = max(ans, M / i); } else if (M / i >= N) { ans = max(ans, i); } } } cout << ans << endl; }