C++の練習を兼ねて, AtCoder Regular Contest 005 の 問題A (大好き高橋君) ~ 問題B (P-CASカードと高橋君) を解いてみた.
■感想.
1. 実装に苦労したものの, AC版に到達できたので, 良かったと思う.
2. 時間を見つけて, 引き続き, 過去問を振り返っていきたいと思う.
■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 32 |
// 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--) const string x[] = { "TAKAHASHIKUN", "Takahashikun", "takahashikun" }; int main(){ // 1. 入力情報. int N; scanf("%d", &N); // 2. 高橋君を表す単語が現れる回数は? int ans = 0; rep(i, N){ char c[111]; scanf("%s", c); string w(c); // 最後の単語で出現するピリオドを除去. if(i == N - 1) w.pop_back(); if(w.size() != 12) continue; rep(k, 3) if(x[k] == w) ans++; } // 3. 出力. printf("%d\n", ans); 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 |
[入力例] 5 Takahashikun is not an eel. [出力例] 1 ※AtCoderのテストケースより [入力例] 5 TAKAHASHIKUN loves TAKAHASHIKUN and takahashikun. [出力例] 3 ※AtCoderのテストケースより [入力例] 6 He is not takahasikun but Takahashikun. [出力例] 1 ※AtCoderのテストケースより [入力例] 1 takahashikunTAKAHASHIKUNtakahashikun. [出力例] 0 ※AtCoderのテストケースより [入力例] 18 You should give Kabayaki to Takahashikun on July twenty seventh if you suspect that he is an eel. [出力例] 1 ※AtCoderのテストケースより |
■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 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 102 103 104 105 106 107 108 109 110 111 |
// 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--) #define pb push_back char board[33][33]; const int C0 = 9; const int C1 = 18; const int C2 = 34; int main(){ // 1. 入力情報. int x, y; char w[22]; scanf("%d %d %s", &y, &x, w); x--, y--; x += C0, y += C0; string W(w); memset(board, '#', sizeof(board)); rep(i, C0){ char c[22]; scanf("%s", c); rep(j, C0) board[i + C0][j + C0] = c[j]; } // 2. 基準とする乱数表から八方向に対して, 転記. // 変換ルール. // i = 18 - i | i = 18 - i | i = 18 - i // j = 18 - j | j = j | j = 34 - j // | | // ------------|------------|------------ // i = i | | i = i // j = 18 - j | 基準 | j = 34 - j // | | // ------------|------------|------------ // i = 34 - i | i = 34 - i | i = 34 - i // j = 18 - j | j = j | j = 34 - j // | | rep(i, C0){ rep(j, C0){ // 2-0. 基準となる乱数表の座標. int bi = i + C0; int bj = j + C0; // 2-1. 左上. board[C1 - bi][C1 - bj] = board[bi][bj]; // 2-2. 上. board[C1 - bi][bj] = board[bi][bj]; // 2-3. 右上. board[C1 - bi][C2 - bj] = board[bi][bj]; // 2-4. 右. board[bi][C2 - bj] = board[bi][bj]; // 2-5. 右下. board[C2 - bi][C2 - bj] = board[bi][bj]; // 2-6. 下. board[C2 - bi][bj] = board[bi][bj]; // 2-7. 左下. board[C2 - bi][C1 - bj] = board[bi][bj]; // 2-8. 左. board[bi][C1 - bj] = board[bi][bj]; } } // rep(i, 33){ // rep(j, 33) printf("%c", board[i][j]); // puts(""); // } // 3. 数字 を 4文字取り出す. string ans = ""; rep(i, 4){ // 3-1. 左上. if(W == "LU") ans.pb(board[x - i][y - i]); // 3-2. 上. if(W == "U") ans.pb(board[x - i][y]); // 3-3. 右上. if(W == "RU") ans.pb(board[x - i][y + i]); // 3-4. 右. if(W == "R") ans.pb(board[x][y + i]); // 3-5. 右下. if(W == "RD") ans.pb(board[x + i][y + i]); // 3-6. 下. if(W == "D") ans.pb(board[x + i][y]); // 3-7. 左下. if(W == "LD") ans.pb(board[x + i][y - i]); // 3-8. 左. if(W == "L") ans.pb(board[x][y - i]); } // 4. 出力. printf("%s\n", ans.c_str()); 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 |
[入力例] 3 5 R 790319030 091076399 143245946 590051196 398226115 442567154 112705290 716433235 221041645 [出力例] 8226 ※AtCoderのテストケースより [入力例] 8 9 LU 206932999 471100777 973172688 108989704 246954192 399039569 944715218 003664867 219006823 [出力例] 2853 ※AtCoderのテストケースより [入力例] 5 7 D 271573743 915078603 102553534 996473623 595593497 573572507 340348994 253066837 643845096 [出力例] 4646 ※AtCoderのテストケースより [入力例] 2 2 LU 729142134 509607882 640003027 215270061 214055727 745319402 777708131 018697986 277156993 [出力例] 0700 ※AtCoderのテストケースより [入力例] 8 7 RD 985877833 469488482 218647263 856777094 012249580 845463670 919136580 011130808 874387671 [出力例] 8878 ※AtCoderのテストケースより |
■参照サイト
AtCoder Regular Contest 005