kmjp's blog

競技プログラミング参加記です

yukicoder : No.2619 Sorted Nim

知識ゲーだったりするのかな。
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;
	}
	
}

まとめ

コードは短いね。