ABC 027 C 倍々ゲーム
問題
方針
TLE する DFS を書いて実験して $0$ と $1$ が切り替わるところの数列を作り、 OEIS で検索した. その結果,漸化式は $a_n = 4a_{n-2} + 2, a_0=0, a_1=1$ だということが分かるので生成して埋め込む.
想定解はとても頭がいいです。さすが sugim プロとしか言えないです。
実装
// TLE します
bool rec(ll cur, ll n){
if (cur > n) return true;
return !(rec(2*cur,n) && rec(2*cur+1,n));
}
bool solve2(ll n){
return rec(1,n);
}
ll a[] = {
0LL,
1LL,
2LL,
6LL,
10LL,
26LL,
42LL,
106LL,
170LL,
426LL,
682LL,
1706LL,
2730LL,
6826LL,
10922LL,
27306LL,
43690LL,
109226LL,
174762LL,
436906LL,
699050LL,
1747626LL,
2796202LL,
6990506LL,
11184810LL,
27962026LL,
44739242LL,
111848106LL,
178956970LL,
447392426LL,
715827882LL,
1789569706LL,
2863311530LL,
7158278826LL,
11453246122LL,
28633115306LL,
45812984490LL,
114532461226LL,
183251937962LL,
458129844906LL,
733007751850LL,
1832519379626LL,
2932031007402LL,
7330077518506LL,
11728124029610LL,
29320310074026LL,
46912496118442LL,
117281240296106LL,
187649984473770LL,
469124961184426LL,
750599937895082LL,
1876499844737706LL,
3002399751580330LL,
7505999378950826LL,
12009599006321322LL,
30023997515803306LL,
48038396025285290LL,
120095990063213226LL,
192153584101141162LL,
480383960252852906LL,
768614336404564650LL,
1921535841011411626LL,
3074457345618258602LL,
7686143364045646506LL
};
int len = sizeof(a)/sizeof(ll);
bool solve(ll n){
rep(i,len) if(a[i] > n) return i&1;
assert(false);
}
int main(){
ll n;
cin >> n;
puts(solve(n) ? "Takahashi" : "Aoki");
}