知識ゲーだったりするのかな。
https://yukicoder.me/problems/no/2619
問題
変則Nim。
山の石の数の初期状態は単調増加であり、その後も石の数が単調増加の範囲でのみ操作できる。
最適手を打った時の勝者はどちらか。
解法
階差を取ると、後ろから奇数番目の値のxorを取った値の0/非0が相当する。
int N; int A[202020]; void solve() { int i,j,k,l,r,x,y; string s; cin>>N; FOR(i,N) cin>>A[i+1]; FOR(i,N) A[i]=A[i+1]-A[i]; reverse(A,A+N); int ni=0; for(i=0;i<N;i+=2) ni^=A[i]; if(ni) { cout<<"First"<<endl; } else { cout<<"Second"<<endl; } }
まとめ
コードは短いね。