ARC046 B - 石取り大作戦
解法
N <= Aの時
絶対に先行が勝つ
N > Aの時
- A > Bの時
N > A > Bであるため先攻が1個だけとる戦法をとると絶対にN > Bにできる。N <= Aになったら全部取れば良い。よって先攻が勝つ。
- A < Bの時
N > B > Aである。A > Bの時と同様に考えると、後攻が絶対勝つ。
- A == Bの時
A + 1個にされると絶対勝てない
2(A + 1)個にされると絶対勝てない
.
.
.
x(A+1)にされると絶対に勝てない。
つまりN % (A + 1) = 0なら後攻が勝ち、そうでないなら先攻が勝ちとなる。
#include <algorithm> #include <cstdio> #include <iostream> #include <map> #include <cmath> #include <queue> #include <set> #include <sstream> #include <stack> #include <string> #include <vector> #include <stdlib.h> #include <stdio.h> #include <bitset> #include <cstring> #include <deque> using namespace std; #define FOR(I,A,B) for(int I = (A); I < (B); ++I) #define CLR(mat) memset(mat, 0, sizeof(mat)) typedef long long ll; void f() {cout << "Takahashi" << endl;} void s() {cout << "Aoki" << endl;} int main() { ios::sync_with_stdio(false); cin.tie(0); int N, A, B; cin >> N >> A >> B; if(N <= A) f(); else { if(A > B) f(); else if(A < B) s(); else { if(N % (A + 1) == 0) s(); else f(); } } return 0; }
ゲーム系は苦手だな〜。