标签:style color os io for ar amp sp line
巴什博奕(Bash Game):只有一堆n个物品,两个人轮流从这堆物品中取物,规定每次至少取一个,最多取m个。最后取光者得胜
对于巴什博弈可以考虑:n=(m+1)*k+s,即如果n%(m+1)!=0则先取者只需取走s物品即可保证获胜。
HDU 1846:裸的。
#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #include<limits.h> typedef long long LL; using namespace std; int t,n,m; int main() { cin>>t; while(t--) { cin>>n>>m; if(n%(m+1)) cout<<"first"<<endl; else cout<<"second"<<endl; } return 0; }
<pre name="code" class="cpp">#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #include<limits.h> typedef long long LL; using namespace std; int n,m; int main() { while(cin>>n>>m) { if(n==0&&m==0) break; if((n-1)%2||(m-1)%2) cout<<"Wonderful!"<<endl; else cout<<"What a pity!"<<endl; } return 0; }
#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #include<limits.h> typedef long long LL; using namespace std; int n,m; int num[1100]; int main() { while(cin>>n>>m) { if(n<=m) { for(int i=n;i<=m;i++) printf(i==m?"%d\n":"%d ",i); } else { if(n%(m+1)==0) printf("none\n"); else printf("%d\n",n%(m+1)); } } return 0; }
威佐夫博奕(Wythoff Game):有两堆各若干个物品,两个人轮流从某一堆或同时从两堆中取同样多的物品,规定每次至少取一个,多者不限,最后取光者得胜。奇异局势(必败局势):a=k*(1+sqt(5.0))/2,b=a+k,带入有a=(b-a)*((1+sqt(5.0))/2).
HDU 1527
#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #include<limits.h> #include<cmath> typedef long long LL; using namespace std; int main() { int a,b; double q; while(cin>>a>>b) { if(a>b) swap(a,b); q=(1+sqrt(5.0))/2; if(a==(int)((b-a)*q)) cout<<0<<endl; else cout<<1<<endl; } return 0; }
尼姆博奕(Nimm Game:有三堆各若干个物品
,两个人轮流从某一堆取任意多的物品,规定每次至少取一个,多者不限,最后取光者得胜。
,我们用(a,b,c)表示某种局势,首先(0,0,0)显然是奇异局势,无论谁面对奇异局势,都必然失败。第二种奇异局势是(0,n,n),只要与对手拿走一样多的物品,最后都将导致(0,0,0)。仔细分析一下,(1,2,3)也是奇异局势,无论对手如何拿,接下来都可以变为(0,n,n)的情形。
HDU 1850:
#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #include<limits.h> #include<cmath> typedef long long LL; using namespace std; int num[110]; int main() { int n,t; while(cin>>n&&n) { t=0; for(int i=0;i<n;i++) { cin>>num[i]; t=(t^num[i]); } int cnt=0; for(int i=0;i<n;i++) { if((t^num[i])<num[i]) cnt++; } cout<<cnt<<endl; } return 0; }
博弈:巴什博奕(Bash Game)威佐夫博奕(Wythoff Game)尼姆博奕(Nimm Game)
标签:style color os io for ar amp sp line
原文地址:http://blog.csdn.net/u013582254/article/details/38880463