HDU 1850 SG值,走法任意 sg(x)=x

来源:互联网 发布:ubuntu安装python 编辑:程序博客网 时间:2024/04/29 17:04
#inclue<stdio.h>
int main(){int i,n,num[111],sum,ans;    while(scanf("%d",&n)&&n) {        ans=0;        sum=0;        for(i=0;i<n;i++){            scanf("%d",&num[i]);            sum^=num[i];        }        if(sum){            for(i=0;i<n;i++){                if((sum^num[i])<num[i]) ans++;            }            printf("%d\n",ans);        }        else puts("0");    }return 0;
  1. 2.可选步数为任意步,SG(x) = x;  
  2. 本题中每一堆都可以选任意个,所以每一堆的SG值都是所剩余的个数。 
  3. 最后结果是所有堆的SG值异或的结果。令ans = 所有堆的SG值异或的结果 
  4. 如果ans == 0,则是必败点。 
  5. 如果ans != 0,使取后结果为0的策略是必胜策略 
  6. 具体怎么取呢? 
  7. 每一堆的数值与ans相异或,所得的结果就是这一堆可以取的数量。 
  8. 但是,如要这一堆数量没有这么多,就不可以这么取 
  9. */