C++の練習を兼ねて, AtCoder Regular Contest 019 の 問題A (A – お買い物クライシス) ~ 問題B (B – こだわりの名前) を解いてみた.
■感想.
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 33 34 |
#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 arc[1010101]; int main(){ // 1. 入力情報. char c[11]; scanf("%s", c); // 2. 金額の表記を取得. int l = strlen(c); int ans = 0; rep(i, l){ int b = 0; if(c[i] == 'O') b = 0; if(c[i] == 'D') b = 0; if(c[i] == 'I') b = 1; if(c[i] == 'Z') b = 2; if(c[i] == 'S') b = 5; if(c[i] == 'B') b = 8; if(c[i] >= '0' && c[i] <= '9') b = c[i] - '0'; ans = 10 * ans + b; } // 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 |
[入力例] 1Z0 [出力例] 120 ※AtCoderのテストケースより [入力例] 4ZD6O [出力例] 42060 ※AtCoderのテストケースより [入力例] BI9Z [出力例] 8192 ※AtCoderのテストケースより [入力例] 3I41S9Z6 [出力例] 31415926 [入力例] I73ZDSOB [出力例] 17320508 |
■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 |
#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 main(){ // 1. 入力情報. char a[303030]; scanf("%s", a); int l = strlen(a); // 2. 回文でない文字列の個数は? // 2-1. 回文の場合. int ans = 0; int lr = 0; rep(i, (l + 1) / 2) if(a[i] == a[l - i - 1]) lr++; if(lr == (l + 1) / 2) ans = 25 * (l - (l & 1)); // 2-2. 回文でない場合(※2箇所以上異なる). if(lr < (l + 1) / 2 - 1) ans = 25 * l; // 2-3. 回文でない場合(※1箇所異なる). if(lr == (l + 1) / 2 - 1){ // 対称部分. ans = 25 * (2 * lr - (l & 1)); // 非対称部分. ans += 24 * (l - 2 * lr + (l & 1)); } // 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 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 |
[入力例] ARC [出力例] 73 ※AtCoderのテストケースより [入力例] S [出力例] 0 ※AtCoderのテストケースより [入力例] NOLEMONNOMELON [出力例] 350 ※AtCoderのテストケースより [入力例] AA [出力例] 50 [入力例] AB [出力例] 48 [入力例] ABRACADABRA [出力例] 275 [入力例] ZYUGEMUZYUGEMUGOKOUNOSURIKIREKAIZYARISUIGYO [出力例] 1075 [入力例] OPQRQPO [出力例] 150 [入力例] AABBAA [出力例] 150 [入力例] XXZXY [出力例] 123 |
■参照サイト
AtCoder Regular Contest 019