[bzoj1299]巧克力棒

Posted pywbktda

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[bzoj1299]巧克力棒相关的知识,希望对你有一定的参考价值。

为了方便考虑,不妨规定只有当当前的巧克力棒都取完了,才能拿新的巧克力棒
然后令先手第一个拿的集合为S,根据nim游戏,当S的xor不为0时先手(即原来的后手)必胜,又轮到先手拿集合,那么只要一直不存在xor为0的集合,先手最终就必败
然后当存在xor为0的集合,那么先手必然可以做到取一个最大xor子集,那么剩下的集合中一定不存在xor为0的子集(否则就可以更大),然后就变成了先手必胜
判断是否存在xor为0的子集可以用线性基来判定(当然这个n太小暴力也行)

技术图片
 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 int n,x,s,a[105];
 4 void add(int x){
 5     for(int i=30;i>=0;i--)
 6         if (x&(1<<i))
 7             if (a[i])x^=a[i];
 8             else{
 9                 s++;
10                 a[i]=x;
11                 break;
12             }
13         
14 }
15 int main(){
16     for(int ii=1;ii<=10;ii++){
17         scanf("%d",&n);
18         s=0;
19         memset(a,0,sizeof(a));
20         for(int i=1;i<=n;i++){
21             scanf("%d",&x);
22             add(x);
23         }
24         if (s<n)printf("NO
");
25         else printf("YES
");
26     }
27 }
View Code

 

以上是关于[bzoj1299]巧克力棒的主要内容,如果未能解决你的问题,请参考以下文章

bzoj1299[LLH邀请赛]巧克力棒 博弈+模拟

bzoj:1299: [LLH邀请赛]巧克力棒

bzoj1299[LLH邀请赛]巧克力棒(博弈论思维题)

BZOJ1299: [LLH邀请赛]巧克力棒

B1299 [LLH邀请赛]巧克力棒 博弈论

9.17模拟赛