BZOJ1115: [POI2009]石子游戏Kam 博弈论

来源:互联网 发布:流氓推广软件是什么 编辑:程序博客网 时间:2024/05/01 12:00

有N堆石子,除了第一堆外,每堆石子个数都不少于前一堆的石子个数。两人轮流操作每次操作可以从一堆石子中移走任意多石子,但是要保证操作后仍然满足初始时的条件谁没有石子可移时输掉游戏。问先手是否必胜。
每个点10组数据,每组1000堆,个数小于等于10000。
首先将石子差分,则移走石子变为将石子移到右边一堆。
结论:从最后一堆开始数,只有奇数堆是有用的,其异或和不为0则先手必胜。
这是因为对于每个从偶数堆向奇数堆挪石子的操作,都可以将其再向右移一次,奇数位异或和不变,而石子总数逐渐减少。

#include<cstdio>using namespace std;int u,n,a[1001],b;int sum;int main(){    scanf("%d",&u);    while(u--)    {        scanf("%d",&n);        sum=0;        for(int i=1;i<=n;i++)        scanf("%d",a+i);        for(int i=n&1?1:2;i<=n;i+=2)        sum^=a[i]-a[i-1];        if(sum) puts("TAK");        else puts("NIE");    }    return 0;}
0 0
原创粉丝点击