C++の練習を兼ねて, AtCoder Regular Contest 137 の 問題C (Distinct Numbers) を解いてみた.
■感想.
1. 問題Cは, 方針が見えなかったので, 解説を参考に, AC版に到達できたと思う.
2. 引き続き, 時間を見つけて, 過去問の学習を進めていきたいと思う.
本家のサイト AtCoder Regular Contest 137 解説 の 各リンク を ご覧下さい.
■C++版プログラム(問題C/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 |
// 解き直し. // https://atcoder.jp/contests/arc137/editorial/3590 // 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--) int main(){ // 1. 入力情報. int N, a, s, t; scanf("%d", &N); rep(i, N){ scanf("%d", &a); if(i == N - 2) s = a; if(i == N - 1) t = a; } // 2. 先手必勝. if(s + 2 <= t){ puts("Alice"); return 0; } // 3. それ以外. printf("%s\n", ((t - N + 1) & 1) ? "Alice" : "Bob"); 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 |
[入力例] 2 2 4 [出力例] Alice ※AtCoderのテストケースより [入力例] 3 0 1 2 [出力例] Bob ※AtCoderのテストケースより [入力例] 5 1 2 5 7 8 [出力例] Bob [入力例] 10 1 2 5 7 8 10 11 12 15 16 [出力例] Alice |
■参照サイト
AtCoder Regular Contest 137