bzoj 1115: [POI2009]石子游戏Kam 阶梯博弈
2017-05-07 20:25
441 查看
题意
有N堆石子,除了第一堆外,每堆石子个数都不少于前一堆的石子个数。两人轮流操作每次操作可以从一堆石子中移走任意多石子,但是要保证操作后仍然满足初始时的条件谁没有石子可移时输掉游戏。问先手是否必胜。n<=1000,ai<=10000
分析
我们设b[i]=a[i]-a[i-1],表示每一堆石子当前可以取的个数。显然若我在第i堆石子取了x个石子,那么b[i]就会加上x,b[i+1]就会减去x,然后不能取的就算输。
那么问题就转换成了一个阶梯博弈问题。
直接上结论吧:该游戏的sg值就等于与n模2同余的位置的b的异或和。
代码
#include<iostream> #include<cstdio> #include<cstdlib> #include<cstring> #include<algorithm> using namespace std; const int N=1005; int a ; int main() { int T; scanf("%d",&T); while (T--) { int n; scanf("%d",&n); for (int i=1;i<=n;i++) scanf("%d",&a[i]); for (int i=n;i>1;i--) a[i]-=a[i-1]; int ans=0; for (int i=n;i>0;i-=2) ans^=a[i]; if (ans) printf("TAK\n"); else printf("NIE\n"); } return 0; }
相关文章推荐
- 【BZOJ1115】[POI2009]石子游戏Kam 阶梯博弈
- [阶梯博弈] BZOJ1115: [POI2009]石子游戏Kam
- BZOJ 1115:[POI2009]石子游戏Kam 阶梯博弈
- bzoj 1115: [POI2009]石子游戏Kam(阶梯博弈)
- [BZOJ1115][POI2009]石子游戏Kam(阶梯博弈)
- [bzoj1115][POI2009]石子游戏Kam_博弈论_阶梯博弈
- BZOJ 1115 [POI2009]石子游戏Kam(阶梯博弈)
- [博弈论][阶梯博弈] BZOJ 1115:POI2009 石子游戏Kam
- [BZOJ1115][POI2009]石子游戏Kam解题报告|阶梯博弈
- [BZOJ 1115] [POI2009] 石子游戏Kam 【阶梯博弈】
- 【bzoj1115】【poi2009】【石子游戏Kam】【阶梯博弈】
- BZOJ 1115: [POI2009]石子游戏Kam【差分+阶梯nim
- BZOJ 1115: [POI2009]石子游戏Kam [阶梯NIM]
- BZOJ 1115: [POI2009]石子游戏Kam 阶梯Nim
- bzoj1115[POI2009]石子游戏Kam 阶梯NIM
- BZOJ1115 [POI2009]石子游戏Kam 【博弈论——阶梯游戏】
- BZOJ1115 [POI2009]石子游戏Kam 【博弈论——阶梯游戏】
- BZOJ 1115: [POI2009]石子游戏Kam (阶梯nim)
- bzoj 1115: [POI2009]石子游戏Kam(博弈)
- bzoj1115: [POI2009]石子游戏Kam