結果
10分ちょっと遅れてスタートし、24分ほどかけて全完。Dでアホみたいな2WA出してペナルティ食らったのは反省。
A - ABC333
脳みそを使いたくなかったので愚直にやった。コード
#include"bits/stdc++.h" using namespace std; using ll = int64_t; int main() { ll A, B; cin >> A >> B; for (ll C = 1; C <= 3; C++) { if (A * B * C % 2 == 1) { cout << "Yes" << endl; return 0; } } cout << "No" << endl; }
B - Shiritori
std::map
で2回以上出るかを数えて、あとは前のものの最後と今回の先頭文字が一致しているかを確認。コード
#include"bits/stdc++.h" using namespace std; using ll = int64_t; int main() { ll N; cin >> N; vector<string> W(N); for (ll i = 0; i < N; i++) { cin >> W[i]; } map<string, ll> mp; for (ll i = 0; i < N; i++) { if (++mp[W[i]] == 2) { cout << "No" << endl; return 0; } if (i > 0 && W[i - 1].back() != W[i].front()) { cout << "No" << endl; return 0; } } cout << "Yes" << endl; }
C - Skip
とを一つの配列に詰めてソートして、階差の最大公約数を取っていったものが答え。厳密には証明してないけど、まぁこれでしょという感じで解いた。コード
#include"bits/stdc++.h" using namespace std; using ll = int64_t; ll gcd(ll a, ll b) { return (b ? gcd(b, a % b) : a); } int main() { ll N, X; cin >> N >> X; vector<ll> x(N); for (ll i = 0; i < N; i++) { cin >> x[i]; } x.push_back(X); sort(x.begin(), x.end()); ll ans; for (ll i = 0; i < N; i++) { ll diff = x[i + 1] - x[i]; if (i == 0) { ans = diff; } else { ans = gcd(ans, diff); } } cout << ans << endl; }
D - Make Them Even
各列について左から右へ見ていき、奇数だったら右に一個流す。最後に各行の一番右を見ていき、奇数だったら下に一個流す。間違えてa[i][j] % 2 == 0
とか書いていたのと、最初に操作回数を表示することを忘れていて2回WA。コード
#include"bits/stdc++.h" using namespace std; using ll = int64_t; int main() { ll H, W; cin >> H >> W; vector<vector<ll>> a(H, vector<ll>(W)); for (ll i = 0; i < H; i++) { for (ll j = 0; j < W; j++) { cin >> a[i][j]; } } vector<ll> y, x, yy, xx; for (ll i = 0; i < H; i++) { for (ll j = 0; j < W - 1; j++) { if (a[i][j] % 2 == 1) { //右へ y.push_back(i + 1); x.push_back(j + 1); yy.push_back(i + 1); xx.push_back(j + 2); a[i][j]--; a[i][j + 1]++; } } } for (ll i = 0; i < H - 1; i++) { if (a[i][W - 1] % 2 == 1) { //下へ y.push_back(i + 1); x.push_back(W); yy.push_back(i + 2); xx.push_back(W); a[i][W - 1]--; a[i + 1][W - 1]++; } } cout << y.size() << endl; for (ll i = 0; i < y.size(); i++) { cout << y[i] << " " << x[i] << " " << yy[i] << " " << xx[i] << endl; } }