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

在这里插入图片描述
在这里插入图片描述
思路:标准的尼姆博弈,设当前异或值为sum,则答案就是有多少个石堆y满足y>x^y(也就是旧的大于新的)只要这样才能从这石堆里拿走y-(x异或y)的石子后就会形成奇异局势。

#include <bits/stdc++.h>
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]);
	}
 } 
发布了70 篇原创文章 · 获赞 0 · 访问量 2447

猜你喜欢

转载自blog.csdn.net/qq_42479630/article/details/104138269
今日推荐