石子游戏。博弈论

分类讨论

① 当偶数的个数不为0

此时对奇数进行操作是不影响结果的。

证明:因为每次都会分出一个奇数/偶数,既然能分出偶数,
那就存在>=2个偶数,对手将新分出的偶数合并,就又回到了初始状态。

此时判断偶数个数的奇偶性即可

② 当偶数的个数为0

存在能被分割的奇数,先手必胜。

证明:先手先分出一个偶数,后手只能分割奇数,先手必能够操作(将新分出来的偶数合并)
当奇数被分割完毕,后手就没法操作,先手胜。
C++ Code
#include<bits/stdc++.h>
using namespace std;
int main()
{
	ios::sync_with_stdio(false);
	cin.tie(0);
	int n, even = 0, odd = 0;
	cin >> n;
	for (int i = 1, x; i <= n; i++) {
		cin >> x;
		if (x&1) {
			if (x >= 3) odd = 1;  // 能被分割
		}
		else even++;
	}
	if (even > 0) {
		if (even&1) cout << "Bob\n";
		else cout << "Alice\n";
	}
	else {
		if (odd) cout << "Alice\n";
		else cout << "Bob\n";
	}
	return 0;
}