UVa 1378 A Funny Stone Game [博弈论 SG函数]
2017-03-13 16:23
399 查看
A Funny Stone Game
题意:
$n \le 23$堆石子,每次选择$i < j \le k$,从$i$拿走1颗$j,k$各放入一颗,不能取就失败。求先手是否必胜以及第一次取的策略
一开始一直在想游戏怎么会结束...眼残没发现$i<j.....$
然后,解这类组合游戏问题重要的一步是发现独立的子游戏
本题中每个石子是互不影响的
$sg[i]$为一颗在$i$的石子的状态
$sg[i]=mex\{sg[j] \oplus sg[k]\}$
然后就$\oplus$起来就行了
题意:
$n \le 23$堆石子,每次选择$i < j \le k$,从$i$拿走1颗$j,k$各放入一颗,不能取就失败。求先手是否必胜以及第一次取的策略
一开始一直在想游戏怎么会结束...眼残没发现$i<j.....$
然后,解这类组合游戏问题重要的一步是发现独立的子游戏
本题中每个石子是互不影响的
$sg[i]$为一颗在$i$的石子的状态
$sg[i]=mex\{sg[j] \oplus sg[k]\}$
然后就$\oplus$起来就行了
#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #include<cmath> using namespace std; const int N=30; inline int read(){ char c=getchar();int x=0,f=1; while(c<'0'||c>'9'){if(c=='-')f=-1; c=getchar();} while(c>='0'&&c<='9'){x=x*10+c-'0'; c=getchar();} return x*f; } int n,s ; int sg ,use[N*N]; int main(){ freopen("in","r",stdin); int cas=0; while( (n=read()) ){ printf("Game %d: ",++cas); for(int i=1;i<=n;i++) s[i]=read(); sg =0; for(int i=n-1;i>=1;i--){ memset(use,0,sizeof(use)); for(int j=i+1;j<=n;j++) for(int k=j;k<=n;k++) use[ sg[j]^sg[k] ]=1; for(int j=0;;j++) if(!use[j]) {sg[i]=j;break;} } int ans=0; for(int i=1;i<=n;i++) if(s[i]&1) ans^=sg[i]; if(ans!=0){ int i,j,k; for(i=1;i<=n;i++) if(s[i]){ int flag=0; ans^=sg[i]; for(j=i+1;j<=n;j++){ if(ans==0) {k=j,flag=1;break;} for(k=j+1;k<=n;k++) if( (ans^sg[j]^sg[k])==0 ) {flag=1;break;} if(flag) break; } if(flag) break; ans^=sg[i]; } printf("%d %d %d\n",i-1,j-1,k-1); }else puts("-1 -1 -1"); } }
相关文章推荐
- sg函数_______A Funny Stone Game(uva 1378)
- [UVA1378] A Funny Stone Game && SG函数
- uva 1378 A Funny Stone Game(博弈论)
- uva 1378 A Funny Stone Game 博弈/组合游戏 sg定理
- uva 1378 A Funny Stone Game (博弈-SG)
- UVA 1378 - A Funny Stone Game(博弈)
- Uva 1378 - A Funny Stone Game
- uva 1378 - A Funny Stone Game(组合游戏)
- uva 1378 - A Funny Stone Game(组合游戏)
- UVA - 1378 A Funny Stone Game (SG定理)
- UVA 1378 A Funny Stone Game (经典博弈)
- [nim博弈扩展 sg函数] UVALive 3668 A Funny Stone Game
- 【UVA1378】A Funny Stone Game (博弈-求SG值-输出方案)
- HDU 1729 Stone Game 【博弈论,SG函数】
- UVALive 3668 A Funny Stone Game(博弈)
- UVALive 3668 A Funny Stone Game
- sg函数 hdu 1729 Stone Game
- sg函数+数学_________Stone game( hdu 5865 2016多校第十场 )
- POJ-2484 A Funny Game (坑爹的博弈论)
- HDOJ 2999 Stone Game, Why are you always there? 博弈 SG函数