常用博弈模板(纯模板 利于记忆)
Posted Alpacaddhh
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了常用博弈模板(纯模板 利于记忆)相关的知识,希望对你有一定的参考价值。
1、巴什博奕(Bash Game):只有一堆n个物品,两个人轮流从这堆物品中取物,规
定每次至少取一个,最多取m个。最后取光者得胜。
#include<iostream> #include<cmath> #include<cstring> #include<string> #include<algorithm> #include<cstdio> using namespace std; const int N=1e6+50; const int INF=0x3f3f3f3f; typedef long long ll; int main() { int n,a,b; while(~scanf("%d%d%d",&n,&a,&b)) { int sum=n%(a+b); if(sum==0) printf("WIN\n"); else if(sum<=a) printf("LOST\n"); else printf("WIN\n"); } return 0; }
2、威佐夫博奕(Wythoff Game):有两堆各若干个物品,两个人轮流从某一堆取任意数量或同
时从两堆中取同样多的物品,规定每次至少取一个,多者不限,最后取光者得胜。
#include<iostream> #include<cmath> #include<cstring> #include<string> #include<algorithm> #include<cstdio> using namespace std; const int N=2e5+50; const int INF=0x3f3f3f3f; typedef long long ll; int a[N]; int main() { int n,m; while(~scanf("%d%d",&n,&m)) { if(n<m) { swap(n,m); } int k=n-m; n=(int)(k*(1+sqrt(5.0))/2); if(n==m) printf("0\n");//输 else printf("1\n");//赢 } return 0; }
3、尼姆博奕(Nimm Game):有三堆各若干个物品,两个人轮流从某一堆取任意多的
物品,规定每次至少取一个,多者不限,最后取光者得胜。
#include<iostream> #include<cmath> #include<cstring> #include<string> #include<algorithm> #include<cstdio> using namespace std; const int N=2e5+50; const int INF=0x3f3f3f3f; typedef long long ll; int a[N]; int main() { int n; while(scanf("%d",&n)) { if(n==0) break; int sg=0; for(int i=0;i<n;i++) { scanf("%d",a+i); sg^=a[i]; } if(sg==0) printf("No\n"); else { printf("Yes\n"); } } return 0; }
以上是关于常用博弈模板(纯模板 利于记忆)的主要内容,如果未能解决你的问题,请参考以下文章