bzoj1188: [HNOI2007]分裂游戏
生活随笔
收集整理的這篇文章主要介紹了
bzoj1188: [HNOI2007]分裂游戏
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
這是一道很有特點(diǎn)的博弈啊。。。
首先我們可以把每個(gè)不同的豆子看成一個(gè)子游戲,然后它的SG值就是它所處于的位置,知道這一點(diǎn)就簡(jiǎn)單了
然后對(duì)于當(dāng)前勝負(fù)判斷就容易弄了,只要那些豆子數(shù)%2==1的SG值合起來就好
方案數(shù)可以暴力枚舉
#include<cstdio> #include<iostream> #include<cstring> #include<cstdlib> #include<algorithm> #include<cmath> using namespace std;int n,p[30],sg[30]; bool v[11000]; int SG(int i) {if(sg[i]!=-1)return sg[i];memset(v,false,sizeof(v));for(int j=i+1;j<=n;j++)for(int k=j;k<=n;k++)v[SG(j)^SG(k)]=true;for(int u=0;;u++)if(v[u]==false){sg[i]=u;return sg[i];} } int main() {int T;scanf("%d",&T);while(T--){int ans=0;scanf("%d",&n);memset(sg,-1,sizeof(sg));sg[n]=0;for(int i=1;i<=n;i++){scanf("%d",&p[i]);if(p[i]%2==1)ans^=SG(i);}int sum=0;for(int i=1;i<=n;i++)for(int j=i+1;j<=n;j++)for(int k=j;k<=n;k++)if((ans^SG(i)^SG(j)^SG(k))==0){sum++;if(sum==1)printf("%d %d %d\n",i-1,j-1,k-1);}if(sum==0)printf("-1 -1 -1\n");printf("%d\n",sum);}return 0; }?
轉(zhuǎn)載于:https://www.cnblogs.com/AKCqhzdy/p/10171943.html
總結(jié)
以上是生活随笔為你收集整理的bzoj1188: [HNOI2007]分裂游戏的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 关于SQL Server 数据库归档的一
- 下一篇: 这 5 条 IntelliJ IDEA