C++の練習を兼ねて, AtCoder Regular Contest 048 の 問題A (階段の下) ~ 問題B (AtCoderでじゃんけんを) を解いてみた.
■感想.
1. 久しぶりに, 問題A, B について, すんなり解けたと思う.
2. 時間を見つけて, 引き続き, 過去問を振り返っていきたいと思う.
本家のサイトARC 048 解説をご覧下さい.
■C++版プログラム(問題A/AC版).
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
#include <bits/stdc++.h> using namespace std; int main(){ // 1. 入力情報. int A, B; scanf("%d %d", &A, &B); // 2. 必要な階段数は? if(A < 0) A++; if(B < 0) B++; int ans = B - A; // 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 |
[入力例] 3 6 [出力例] 3 ※AtCoderのテストケースより [入力例] -1 1 [出力例] 1 ※AtCoderのテストケースより [入力例] -7 -2 [出力例] 5 ※AtCoderのテストケースより [入力例] -1000000000 1000000000 [出力例] 1999999999 |
■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 |
#include <bits/stdc++.h> using namespace std; using P = pair<int, int>; #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 #define a first #define b second int player[101010][3], cum[101010]; int main(){ // 1. 入力情報. int N, r, h; vector<P> v; scanf("%d", &N); rep(i, N){ scanf("%d %d", &r, &h); h--; v.pb({r, h}); player[r][h]++; } // 2. 累積和を計算. rep(r, 100010) cum[r + 1] = cum[r] + player[r][0] + player[r][1] + player[r][2]; // 3. 勝敗を確認し出力. for(auto &p : v){ // 勝ち数. int w = cum[p.a] + player[p.a][(p.b + 1) % 3]; // 負け数. int l = cum[100001] - cum[p.a + 1] + player[p.a][(p.b + 2) % 3]; // 引き分け数. int d = player[p.a][p.b] - 1; // 出力. printf("%d %d %d\n", w, l, 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 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 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 |
[入力例] 6 2 1 2 2 3 2 5 3 2 2 3 3 [出力例] 2 3 0 0 4 1 4 1 0 5 0 0 0 4 1 3 2 0 ※AtCoderのテストケースより [入力例] 2 1999 3 2000 1 [出力例] 0 1 0 1 0 0 ※AtCoderのテストケースより [入力例] 8 3200 2 2800 3 2800 2 2700 1 2800 2 3200 1 2700 1 3200 3 [出力例] 6 1 0 2 5 0 3 3 1 0 6 1 3 3 1 6 1 0 0 6 1 6 1 0 ※AtCoderのテストケースより [入力例] 50 450 2 1350 1 2250 3 2250 2 1500 2 1650 1 1950 1 2100 1 450 3 150 2 1950 1 300 3 1200 3 1200 2 1800 3 1200 2 1050 1 1650 1 1650 2 150 1 1050 2 2250 1 1050 2 750 1 2250 1 2100 2 150 1 1050 3 1200 3 900 3 300 2 2250 1 150 3 750 1 1050 3 2250 2 150 1 1500 2 1650 3 1350 2 900 1 1050 2 1950 2 750 1 750 3 1950 1 1200 2 750 1 600 2 1650 3 [出力例] 8 41 0 29 20 0 47 2 0 45 3 1 30 18 1 33 15 1 39 8 2 43 6 0 7 42 0 1 48 0 39 8 2 5 44 0 23 25 1 25 22 2 37 12 0 25 22 2 20 29 0 33 15 1 34 15 0 1 46 2 19 28 2 46 1 2 19 28 2 10 36 3 46 1 2 42 7 0 1 46 2 18 30 1 23 25 1 16 33 0 6 43 0 46 1 2 3 46 0 10 36 3 18 30 1 45 3 1 1 46 2 30 18 1 34 14 1 28 21 0 15 34 0 19 28 2 38 11 0 10 36 3 14 35 0 39 8 2 25 22 2 10 36 3 9 40 0 34 14 1 |
■参照サイト
AtCoder Regular Contest 048