博弈论
Keep_Trying_Go
无
展开
-
HDU1524
题意:给出一个有向无环图,再给出如干个出站位置;最后每一行给出如干个棋子的初始位置,两个人轮流移动棋子,最后不能移动的人输。以下用dfs实现的,超时:#include<iostream>#include<algorithm>#include<cstring>#include<cmath>using namespace std;const int maxx=1005;int vis[maxx][maxx];int sg[maxx];int n原创 2021-03-05 16:19:54 · 121 阅读 · 0 评论 -
HDU3904
题意:每一次的操作包括两个步骤:1.选择要删除的一条边2.将没有与根节点相连的边和点都移除掉。其中最后不能操作者败,否则最后操作者胜。树上删边博弈:定理-叶子节点的sg值为0,其他节点u的sg[u]等于它儿子v的(sg[v]+1)的异或和。#include<iostream>#include<algorithm>#include<cstring>#include<cmath>#include<vector>using names原创 2021-03-05 16:05:56 · 108 阅读 · 0 评论 -
HDU1907
就是尼姆博弈,但是当ans[i]全为1时要做特殊的判断:#include<iostream>#include<algorithm>#include<cstring>#include<cmath>using namespace std;const int maxx=1005;int ans[maxx];int main(){ int t; cin>>t; int n; while(t--){ cin>>n;原创 2021-03-05 00:01:29 · 114 阅读 · 2 评论 -
HDU1849
纯尼姆博弈,将所有的值异或起来,ans为零输出Grass Win!否则输出Rabbit Win!#include<iostream>#include<algorithm>#include<cstring>#include<cmath>#include<map>#include<set>#include<cstdio>using namespace std;typedef long long ll;cons原创 2021-03-05 00:01:42 · 116 阅读 · 1 评论 -
HDU1944
SG函数应用模版:题意:给出s,表示可以移除的数目。给出n,代表样例个数,每一个样例首先给出m-代表堆的个数。可以看成是尼莫博弈,将每个堆的sg异或。方法一:#include<iostream>#include<algorithm>#include<cstring>#include<cmath>using namespace std;const int maxx=10005;int f[105];int sg[maxx];int me原创 2021-03-05 00:01:52 · 121 阅读 · 1 评论 -
poj2960
SG函数应用模版:题意:给出s,表示可以移除的数目。给出n,代表样例个数,每一个样例首先给出m-代表堆的个数。可以看成是尼莫博弈,将每个堆的sg异或。方法一:#include<iostream>#include<algorithm>#include<cstring>#include<cmath>using namespace std;const int maxx=10005;int f[105];int sg[maxx];int me原创 2021-03-05 00:02:02 · 140 阅读 · 2 评论 -
poj2311
给出的边最小为2,所以当出现2* 2,2* 3,3* 2时为终止状态;将剪的两个纸片的sg进行异或值标记。 现在要是谁剪出1* 1的纸片就赢了。#include<iostream>#include<algorithm>#include<cmath>#include<cstring>using namespace std;const int maxx=1005;int sg[505][505];int a,b;int SG(int n,int原创 2021-03-04 13:15:48 · 83 阅读 · 0 评论 -
HDU1848
HDU1848尼姆博弈-sg(模版) 先求出sg值,采用尼姆博弈的思路将sg[n]^sg[m]^sg[p]判断胜败情况。 #include<iostream>#include<algorithm>#include<map>#include<set>#include<vector>#include<cstring>#include<cmath>#include<iomanip>using na原创 2021-03-04 12:09:15 · 145 阅读 · 2 评论 -
HDU1847
HDU1847sg函数的应用(模版) #include<iostream>#include<algorithm>#include<cstring>#include<vector>#include<map>#include<set>#include<iomanip>#include<cmath>using namespace std;const int maxx=1005;int sg[ma原创 2021-03-04 12:08:34 · 129 阅读 · 2 评论 -
HDU1536
HDU1536SG函数应用模版:题意:给出s,表示可以移除的数目。给出n,代表样例个数,每一个样例首先给出m-代表堆的个数。可以看成是尼莫博弈,将每个堆的sg异或。 #include <iostream>#include <algorithm>#include <cstring>#define maxx 10005 #define maxn 110 using namespace std;int f[maxn]; int sg[maxx原创 2021-03-04 12:07:44 · 152 阅读 · 2 评论 -
HDU2147
#include<iostream>#include<algorithm>#include<cstring>using namespace std;int main(){ int n,m; while(cin>>n>>m){ if(n==0&&m==0)break; if(m%2==0||n%2==0){ cout<<"Wonderful!"<<endl; }else{ c原创 2021-02-20 10:21:14 · 110 阅读 · 0 评论 -
HDU2149
#include<iostream>#include<algorithm>#include<cstring>#include<cmath>using namespace std;int main(){ int n,m; while(cin>>n>>m){ int mod=n%(m+1); if(n<m){ for(int i=n;i<m;i++){ cout<<i<<原创 2021-02-20 10:21:02 · 110 阅读 · 0 评论 -
HDU2188
#include<iostream>#include<algorithm>#include<cstring>#include<cmath>#include<vector>#include<iomanip>#include<cstdio>#include<cstdlib>using namespace std;int main(){ int t; cin>>t; while(t-原创 2021-02-20 10:20:49 · 111 阅读 · 0 评论 -
poj1067
这个题我也是记得公式:#include<iostream>#include<algorithm>#include<cstring>#include<cmath>using namespace std;int main(){ int n,m; while(cin>>n>>m){ double r=(sqrt(5.0)+1)/2; double d=abs(n-m)*r; if((int)d!=min(n,m))原创 2021-02-20 10:20:29 · 116 阅读 · 0 评论 -
poj2234
尼姆博弈:#include<iostream>#include<algorithm>#include<cstring>#include<cmath>using namespace std;const int maxx=105;int main(){ int n; int a[maxx]; while(cin>>n){ for(int i=0;i<n;i++){ cin>>a[i]; } int原创 2021-02-20 10:20:01 · 58 阅读 · 0 评论 -
poj2484
#include<iostream>#include<algorithm>#include<cstring>#include<cmath>using namespace std;int main(){ int n; while(cin>>n){ if(n==0)break; if(n==1||n==2){ cout<<"Alice"<<endl; }else{ cout<<"原创 2021-02-20 10:19:34 · 106 阅读 · 0 评论 -
poj2975
尼姆博弈:#include<cstring>#include<cmath>#include<cstdio>#include<iostream>#include<algorithm>typedef long long ll;const int maxn = 1000 + 10;using namespace std;ll a[maxn];int main(){ int n; ll ans; while(sc原创 2021-02-20 10:19:02 · 60 阅读 · 0 评论 -
poj1704
这也是在看了大神的思路之后才写的。#include<iostream>#include<algorithm>#include<cmath>#include<cstring>using namespace std;const int maxx=1005;int main(){ int t; int n; int a[maxx]; cin>>t; while(t--){ cin>>n; for(int i=1原创 2021-02-19 11:19:12 · 105 阅读 · 0 评论 -
HDU1850
尼姆博弈#include<cstring>#include<cmath>#include<cstdio>#include<iostream>#include<algorithm>typedef long long ll;const int maxn = 1000 + 10;using namespace std;ll a[maxn];int main(){ int n; ll ans; while(sca原创 2021-02-19 11:12:31 · 103 阅读 · 0 评论 -
HDU1846
#include<iostream>#include<algorithm>#include<cstring>#include<cmath>using namespace std;int main(){ int t; cin>>t; while(t--){ int n,m; cin>>n>>m; int mod=n%(m+1); if(mod!=0){ cout<<"first原创 2021-02-19 11:11:02 · 62 阅读 · 0 评论 -
HDU1527(博弈论)
这道题我也是记的公式:#include<iostream>#include<algorithm>#include<cstring>#include<cmath>using namespace std;int main(){ int n,m; while(cin>>n>>m){ double r=(sqrt(5.0)+1)/2; double d=abs(n-m)*r; if((int)d!=min(n,m))原创 2021-02-19 11:10:01 · 135 阅读 · 0 评论