C++の練習を兼ねて, AtCoder Regular Contest 021 の 問題A (DEAD END) ~ 問題B (Your Numbers are XORed…) を解いてみた.
■感想.
1. 問題A, Bは, 方針を絞り込むことができたので, AC版に到達できたと思う.
2. 引き続き, 時間を見つけて, 過去問の学習を進めていきたいと思う.
本家のサイト AtCoder Regular Contest 021 解説 を ご覧下さい.
■C++版プログラム(問題A/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 |
// 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[4][4]; int main(){ // 1. 入力情報. rep(i, 4) rep(j, 4) scanf("%d", &a[i][j]); // 2. 判定. bool ok = false; rep(i, 4){ rep(j, 4){ // 上下. if(i < 3 && a[i][j] == a[i + 1][j]) ok = true; // 左右. if(j < 3 && a[i][j] == a[i][j + 1]) ok = true; } } // 3. 出力. printf("%s\n", ok ? "CONTINUE" : "GAMEOVER"); 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 45 46 47 48 49 50 51 52 53 54 55 56 |
[入力例] 2 8 2 2 32 2 8 8 4 64 2 128 2 8 4 2 [出力例] CONTINUE ※AtCoderのテストケースより [入力例] 2 4 16 4 8 32 128 8 2 64 16 2 32 4 32 4 [出力例] GAMEOVER ※AtCoderのテストケースより [入力例] 2 4 2 4 4 2 4 2 2 4 2 4 4 2 4 2 [出力例] GAMEOVER ※AtCoderのテストケースより [入力例] 2 4 8 16 4 8 16 32 8 16 32 64 16 32 64 128 [出力例] GAMEOVER [入力例] 2 2 2 2 8 8 8 8 2 2 2 2 8 8 8 8 [出力例] CONTINUE [入力例] 256 512 128 2048 128 1024 1024 512 256 2048 128 256 512 1024 2048 512 [出力例] CONTINUE |
■C++版プログラム(問題B/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 |
// 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[101010], b[101010]; int main(){ // 1. 入力情報. int L; scanf("%d", &L); rep(i, L) scanf("%d", &b[i]); // 2. 存在すると仮定. rep(i, L - 1) a[i + 1] = a[i] ^ b[i]; // 3. 出力. if(b[L - 1] == (a[0] ^ a[L - 1])) rep(i, L) printf("%d\n", a[i]); else puts("-1"); 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 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 |
[入力例] 2 1 1 [出力例] 0 1 ※AtCoderのテストケースより [入力例] 3 1 4 1 [出力例] -1 ※AtCoderのテストケースより [入力例] 3 1 2 3 [出力例] 0 1 3 ※AtCoderのテストケースより [入力例] 20 50 120 25 36 40 16 110 118 5 26 43 80 107 116 99 46 104 35 25 51 [出力例] 0 50 74 83 119 95 79 33 87 82 72 99 51 88 44 79 97 9 42 51 [入力例] 10 116834405 48108109 25179808 44419470 67536150 119978244 54763173 132583455 59949508 52125290 [出力例] 0 116834405 69784104 94954632 118304006 51095568 70062356 124686257 9019310 52125290 |
■参照サイト
AtCoder Regular Contest 021