2020 CCPC Wannafly Winter Camp Day2 C 纳新一百的石子游戏(尼姆博弈)

2020 CCPC Wannafly Winter Camp Day2 C 纳新一百的石子游戏(尼姆博弈)_第1张图片
2020 CCPC Wannafly Winter Camp Day2 C 纳新一百的石子游戏(尼姆博弈)_第2张图片
思路:标准的尼姆博弈,设当前异或值为sum,则答案就是有多少个石堆y满足y>x^y(也就是旧的大于新的)只要这样才能从这石堆里拿走y-(x异或y)的石子后就会形成奇异局势。

#include 
using namespace std;
const int maxn=1e5+1;
typedef long long ll;
ll a[maxn],num[maxn],sum=0;
int main()
{
	int n;
	scanf("%d",&n);
	for(int i=1;i<=n;++i)
	{
		scanf("%lld",&a[i]);
		sum^=a[i];
		for(int j=0;j<62;++j) if((a[i]>>j)&1) num[j]++;
		if(sum==0){
			printf("0\n");continue;
		}
		ll t=sum,cnt=-1;
		while(t) cnt++,t>>=1;
		printf("%lld\n",num[cnt]);
	}
 } 

你可能感兴趣的:(2020 CCPC Wannafly Winter Camp Day2 C 纳新一百的石子游戏(尼姆博弈))