POJ 2975 Nim 题解

来源:互联网 发布:dota2比赛数据未找到 编辑:程序博客网 时间:2024/05/20 23:56

题意

给定nim游戏的一种局面,问你现在这一步有多少种取法使得你进入必胜态

思路

你的必胜态也就是对手的必败态,也就需要你这一步取完后剩下每堆的石子数量异或和为0,而一步只能选择一堆石子拿走一些,所以其他石子异或和不变,如果想要在这一堆石子中拿完一些后进入必胜态,需要这一堆石子剩下的数量为其他石子异或和。我们可以先将全部数量异或,然后再异或这一堆的石子数量得到其他石子异或和,然后判断这个数是否小于这一堆石子数量,如果小于就可以从这一堆中取走这两数之差个石子,是一种取法,否则,这一堆不能取,遍历一遍后可得答案

代码

#include <cstdio>int k[1001];int main(){    int n,allxor,ans;    while(1)    {        scanf("%d",&n);        if(n==0)            break;        allxor=0;        ans=0;        for(int i=0;i<n;i++)        {            scanf("%d",&k[i]);            allxor^=k[i];        }        for(int i=0;i<n;i++)            if((allxor^k[i])<k[i])                ans++;        printf("%d\n",ans);    }    return 0;}
0 0
原创粉丝点击