C++の練習を兼ねて, AtCoder Grand Contest 048 の 問題A (atcoder < S) ~ 問題B (Bracket Score) を解いてみた.
■感想.
1. 問題A, B は, 方針が見えなかったので, 解説を参考に実装したところ, AC版に到達出来た.
2. 個人的には, 両問とも, 解説のロジックで, 解けることが興味深く思った.
3. 引き続き, 時間を見つけて, 過去問の学習を進めていきたいと思う.
本家のサイト AtCoder Grand Contest 048 解説 の 各リンク を ご覧下さい.
■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 35 36 37 38 39 40 41 42 43 44 45 |
// 解き直し. // https://atcoder.jp/contests/agc048/editorial/197 // C++20(GCC 12.2) #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 T; scanf("%d", &T); // 2. 各テストケース. rep(i, T){ // 2-1. テストケース入力情報. char c[1010]; scanf("%s", c); string S(c); int ss = S.size(); // 2-2. S > atcoder. if(S > "atcoder"){ puts("0"); continue; } // 2-3. S で a 以外の文字が出現する位置は? int k = -1; rep(j, ss){ if(S[j] != 'a'){ k = j; break; } } // 2-4. 出力. printf("%d\n", k == -1 ? -1 : (S[k] <= 't' ? k : k - 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 |
[入力例] 3 atcodeer codeforces aaa [出力例] 1 0 -1 ※AtCoderのテストケースより [入力例] 7 atcoder btcoder aaaaaaaaaa aaaaaaaaaatcoder aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaucoder aaaaaaaaaaucoder aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabcoder [出力例] 1 0 -1 10 99 9 100 |
■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 |
// 解き直し. // https://atcoder.jp/contests/agc048/editorial/198 // C++20(GCC 12.2) #include <bits/stdc++.h> using namespace std; using LL = long long; using vl = vector<LL>; #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 all(x) x.begin(), x.end() int main(){ // 1. 入力情報. int N; scanf("%d", &N); vl a(N), b(N); LL ans = 0; rep(i, N){ scanf("%lld", &a[i]); ans += a[i]; } rep(i, N) scanf("%lld", &b[i]); // 2. 整数列 B と 整数列 A の 差分(偶奇ごと). vl e(N / 2), o(N / 2); rep(i, N){ if(i & 1) e[i / 2] = b[i] - a[i]; else o[i / 2] = b[i] - a[i]; } // 3. sort. sort(all(e)); sort(all(o)); // 4. 最大値は? repr(c, N / 2 - 1, 0) ans = max(ans, ans + e[c] + o[c]); // 5. 出力. printf("%lld\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 |
[入力例] 4 4 2 3 1 2 3 2 4 [出力例] 12 ※AtCoderのテストケースより [入力例] 10 866111664 844917655 383133839 353498483 472381277 550309930 378371075 304570952 955719384 705445072 178537096 218662351 231371336 865935868 579910117 62731178 681212831 16537461 267238505 318106937 [出力例] 6629738472 ※AtCoderのテストケースより [入力例] 6 1 1 3 5 3 2 3 6 1 1 7 3 [出力例] 27 [入力例] 100 11 31 62 26 14 30 91 76 49 45 17 35 66 13 40 92 79 97 1 86 30 29 93 73 88 60 82 46 53 93 39 47 10 3 49 3 91 66 7 78 83 43 68 57 15 67 43 23 1 33 38 44 20 3 72 81 70 20 63 91 84 2 44 96 38 86 92 51 29 25 43 43 84 37 11 98 42 47 58 21 65 50 99 99 47 8 39 2 11 77 16 49 62 76 47 1 72 50 77 10 10 22 34 92 45 47 29 83 55 30 33 99 73 5 46 6 11 82 75 59 67 77 84 82 83 6 22 78 5 78 16 2 55 74 73 63 95 48 91 53 86 94 31 41 43 16 27 56 45 95 69 1 43 90 59 27 80 98 55 42 11 71 63 84 54 8 61 15 9 47 36 11 60 51 67 17 13 65 63 16 55 67 65 54 94 23 51 65 14 71 71 50 19 63 73 83 69 15 86 55 [出力例] 6666 [入力例] 300 1497 22535 51088 3833 46272 71399 21920 87631 18249 79764 22730 27792 70430 28366 50163 37724 18899 77601 16280 37406 82587 86790 48446 42083 63894 89207 89929 91109 32662 13409 80912 182 84805 77801 48836 17741 38512 8957 13578 96975 6720 38861 8687 83167 25803 13350 96905 22353 63001 82134 22955 81939 72242 75209 77403 50087 36155 82338 88775 57695 11783 17474 93991 24095 27836 64201 29920 978 41288 61844 13560 2107 83191 20755 25860 48209 79844 60622 70552 18126 87999 51854 32401 11282 67347 49714 76528 78991 38408 44771 78343 23167 99287 87237 48614 44543 12456 90952 32278 49918 16226 39892 73749 4043 45042 34810 73407 81909 88203 37231 93088 21120 41384 33504 46928 80731 92006 95356 66301 69287 94232 14719 93296 58848 51747 26187 2703 27173 43859 95848 72924 38186 7618 59671 79939 43541 41957 2825 30503 11315 6593 19971 93084 70871 65742 14873 34186 28109 94303 66760 23103 45500 95659 44466 18666 13733 44994 61956 5101 60992 17441 93228 33187 38733 98167 44203 70465 5327 83196 19584 94290 20092 27294 9317 47294 7660 61986 94143 57030 88977 56883 89753 15271 22536 85189 60593 16751 65367 27308 72640 20835 59805 35770 31466 58327 49999 25409 13945 77161 38901 21685 52686 22022 76159 1907 45834 56096 77784 12799 70166 84251 55526 38672 61646 51199 56936 53467 52265 39407 21984 87526 45830 40500 94725 79863 68811 96498 93540 60294 3381 3526 22798 92469 52558 99319 19599 96775 63750 83638 65323 50812 73008 9088 76559 69546 38331 89729 56868 86790 20163 80614 50181 77045 38597 75670 1861 40306 81731 69691 74791 48746 35917 39704 94389 80738 9335 8999 62402 20729 94495 88028 30810 25999 69987 70812 92949 39007 38799 5410 10004 57552 92378 76879 25312 35642 34076 56275 12385 5081 85033 55578 38736 37477 16161 42282 22911 60217 36192 84412 21168 89938 16998 73346 1658 94391 4704 31437 52022 78015 35675 90458 33892 92719 96691 65953 93810 80272 72529 89841 59057 97377 10888 19156 66809 33864 41198 66043 17403 87769 31944 78400 40696 16404 71111 48098 33300 78497 72401 51850 49834 47819 19689 73076 3595 67233 83491 79391 66106 68818 87472 18038 42207 62854 17992 80418 96032 81216 4042 96328 10505 57693 64220 66603 35605 99890 45971 96304 66770 43330 57562 51365 27376 8801 73637 12603 47494 70323 42134 70836 38414 43478 21149 19508 42754 63462 41928 38181 65637 49612 2482 47044 24539 74669 3883 39297 50329 22264 60083 10568 76183 53813 4775 43106 86767 84534 66585 49433 15432 24423 94604 11711 96738 81052 76192 37852 15232 11739 54775 61183 20897 24793 81922 30924 10663 66114 69916 54941 34876 18087 56346 24302 12482 14000 14680 18733 46896 20354 56340 50769 59123 2185 14786 37093 75098 96924 23029 9791 59628 85775 97437 76148 6093 92409 3136 86306 69557 84479 76226 15185 55762 6713 60033 80357 58674 47978 18793 98953 70945 69982 72396 17614 29067 44681 70979 61751 77956 77387 13206 956 77616 92025 17274 13966 88111 36654 31137 82652 44155 80674 36708 30829 67261 59420 28086 48158 74347 3463 14397 47097 77868 27406 61253 51071 12087 12222 74579 18937 67936 22861 63047 91023 71467 30971 98326 77160 65894 53202 25786 9222 94230 47471 23617 61639 70566 34945 11152 46616 38939 98592 40648 56798 29817 62872 70494 20569 48614 32514 76506 30963 20988 79207 86520 48286 18693 64757 33116 89125 98746 835 52439 44107 64870 16823 41030 65701 20604 41566 60004 73761 8702 26206 19110 84040 29538 37581 90008 65167 92372 44108 23895 58407 42769 85594 49813 73994 65328 57698 57605 64182 8456 16448 65809 91226 75823 23282 97387 51887 86015 70138 62478 92918 31674 3299 75507 43803 71928 97467 20218 64364 77766 [出力例] 20231116 |
■参照サイト
AtCoder Grand Contest 048