C++の練習を兼ねて, AtCoder Regular Contest 131 の 問題C (Zero XOR) を解いてみた.
■感想.
1. 問題Cは, 解答方針が見えなかったので, 解説を参考に実装して, ようやく, AC版に到達できた.
2. 引き続き, 時間を見つけて, 過去問の学習を進めていきたいと思う.
本家のサイト AtCoder Regular Contest 131 解説 の 各リンク を ご覧下さい.
■C++版プログラム(問題C/AC版).
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
// 解き直し. // https://atcoder.jp/contests/arc131/editorial/3049 // C++(GCC 9.2.1) #include <bits/stdc++.h> using namespace std; #define repex(i, a, b, c) for(int i = a; i < b; i += c) #define repx(i, a, b) repex(i, a, b, 1) #define rep(i, n) repx(i, 0, n) #define repr(i, a, b) for(int i = a; i >= b; i--) int a[404040]; int main(){ // 1. 入力情報. int N, v = 0; scanf("%d", &N); rep(i, N){ scanf("%d", &a[i]); v ^= a[i]; } // 2. 奇数. if(N & 1) puts("Win"); // 3. 偶数. if(!(N & 1)){ bool ok = false; rep(i, N) if(v == a[i]) ok = true; printf("%s\n", ok ? "Win" : "Lose"); } return 0; } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
[入力例] 6 9 14 11 3 5 8 [出力例] Lose ※AtCoderのテストケースより [入力例] 1 131 [出力例] Win ※AtCoderのテストケースより [入力例] 8 12 23 34 45 56 78 89 98 [出力例] Win ※AtCoderのテストケースより [入力例] 10 123 103 16 35 82 84 2 32 85 97 [出力例] Lose [入力例] 10 59 95 64 107 91 1 105 69 54 100 [出力例] Win [入力例] 25 37 94 66 42 29 40 6 26 1 30 24 92 10 7 35 70 79 52 111 42 73 111 34 15 8 [出力例] Win |
■参照サイト
AtCoder Regular Contest 131