C++の練習を兼ねて, AtCoder Regular Contest 023 の 問題A (A – 経過日数) ~ 問題B (B – 謎の人物X) を解いてみた.
■感想.
1. 問題A は, 問題文に指定されている経過日数に関する公式が面白いと感じた.
2. 問題B は, 累積和の復習が出来たので 良かったと思う.
3. 時間を見つけて, 引き続き, 過去問を振り返っていきたいと思う.
本家のサイトARC 023 解説をご覧下さい.
■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 |
#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. 入力情報. int y, m, d; scanf("%d %d %d", &y, &m, &d); // 2. 13月, 14月 を 考慮. if(m == 1 || m == 2) y--, m += 12; // 3. 経過日数を計算. int ans = 0; ans += 365 * y; ans += y / 4; ans -= y / 100; ans += y / 400; ans += 306 * (m + 1) / 10; ans += d; ans -= 429; ans = 735369 - ans; // 4. 出力. 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 |
[入力例] 1988 7 3 [出力例] 9449 ※AtCoderのテストケースより [入力例] 1 1 1 [出力例] 735369 ※AtCoderのテストケースより [入力例] 2014 5 16 [出力例] 1 ※AtCoderのテストケースより [入力例] 2012 2 29 [出力例] 808 ※AtCoderのテストケースより [入力例] 2011 2 2 [出力例] 1200 [入力例] 2008 11 24 [出力例] 2000 |
■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 |
#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[1010][1010], aMax[2020], aMaxCum[2020]; int main(){ // 1. 入力情報. int R, C, D; scanf("%d %d %d", &R, &C, &D); rep(i, R) rep(j, C) scanf("%d", &a[i][j]); // 2. 対角線方向で最大値を保存. rep(i, R) rep(j, C) aMax[i + j] = max(aMax[i + j], a[i][j]); // 3. 偶奇に分けて, i以下の最大値を保存. aMaxCum[0] = aMax[0]; aMaxCum[1] = aMax[1]; rep(i, 2020) aMaxCum[i + 2] = max(aMaxCum[i], aMax[i + 2]); // 4. 出力. printf("%d\n", aMaxCum[D]); 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 |
[入力例] 3 2 1 9 5 3 1 8 9 [出力例] 5 ※AtCoderのテストケースより [入力例] 4 4 100 999 999 999 999 999 999 999 999 999 999 999 999 999 999 999 999 [出力例] 999 ※AtCoderのテストケースより [入力例] 3 4 5 700 198 700 198 198 700 198 700 700 198 700 198 [出力例] 198 ※AtCoderのテストケースより [入力例] 3 5 7 100 333 400 666 800 111 200 444 700 888 500 222 300 777 900 [出力例] 888 [入力例] 10 16 999 282 1151 195 1143 910 1179 834 1081 48 414 883 235 799 1164 1041 1218 34 621 898 79 1017 1058 679 1057 1229 499 347 262 1203 815 58 1169 1105 1152 548 817 743 636 239 318 601 267 642 205 1041 381 1016 439 1161 913 84 588 1151 1121 1141 513 632 1190 672 355 861 202 929 904 749 102 1032 135 751 1039 513 748 715 199 263 463 809 1187 589 524 1171 626 156 873 1021 317 1099 1122 253 977 1129 615 873 543 804 1011 163 917 353 640 84 1024 637 1054 553 426 711 185 202 127 543 591 987 586 493 157 42 164 758 181 139 152 361 645 245 661 1038 1180 489 884 558 312 661 348 990 147 489 1097 1199 145 618 654 402 718 554 446 1077 1005 326 145 1015 1148 1070 1233 839 1078 992 217 674 478 [出力例] 1229 |
■参照サイト
AtCoder Regular Contest 023