博弈
mengsz1
我爱学习
展开
-
博弈论—NP图法kiki's game HDU - 2147
题解:这一题用NP图来进行求解,分别画出 偶X奇,偶X偶,奇X奇的矩阵来找出规律来即可求出结果。 NP图的画法:博客: https://blog.csdn.net/Adusts/article/details/81385588以下内容为借鉴,因为写的很好,没啥要补充的。 博弈论:组合博弈 * 必败点(P点) :前一个选手(Previous player)将取胜的位置称为必败点。 ...原创 2018-09-11 19:15:11 · 484 阅读 · 0 评论 -
Human or Pig ZOJ - 3513--NP图法
题意:给一个N*M的格子,每一个点都是出发点,判断从这一个点出发早上还是晚上出发到河边能变成人,白天是人,晚上是猪;题解:NP图法:如果 x == y ,那么这时候只有一种走法,这时候必须是猪,除此之外只要能够到达x == y的点就是人。#include<bits/stdc++.h>#include<cstring>using namespace std;#...原创 2018-09-19 22:23:17 · 119 阅读 · 0 评论 -
树上博弈——A tree game HDU - 3094
题意:删边并去除与跟不想连的边,最后不能移动的人失败题解:每个根节点的SG为0,中间节点的SG为所有根节点SG值加一的亦或和。代码:#include<bits/stdc++.h>#include<cstring>using namespace std;const int maxn = 1e5+50;vector<int> G[maxn];i...原创 2018-09-19 20:15:56 · 531 阅读 · 0 评论 -
K倍动态减法——A simple stone game POJ - 3922
题意:如果可以获胜,问所走最小步数是多少题解:构造数列,a数组里存的是必败态,如果当前数不在必败态之中,那就看离他最近的必胜态,用一个简单的循环就能找到#include<cstdio>#include<cstring>using namespace std;const int maxn = 4000000+1000;int a[maxn];int b[m...原创 2018-09-18 23:18:21 · 142 阅读 · 0 评论 -
K倍动态减法——Game ZOJ - 3599
题解:K倍动态减法https://blog.csdn.net/tbl_123/article/details/24884861#include&lt;bits/stdc++.h&gt;#include&lt;cstring&gt;using namespace std;#define LL long longconst int N = 3000000;LL a[N],b[N]...原创 2018-09-18 21:06:35 · 378 阅读 · 0 评论 -
GG and MM HDU - 3595
题解:Every_SG2,Every-SG 定义: 1,Every-SG 游戏规定,对于还没有结束的单一游戏,游戏者必须对该游 戏进行一步决策,也就是每轮操作要对所有单一游戏进行操作。 2,Every-SG 游戏的其他规则与普通SG游戏相同。 定理: 对于Every-SG 游戏先手必胜当且...原创 2018-09-18 20:53:42 · 169 阅读 · 0 评论 -
威佐夫博弈——取石子游戏 POJ - 1067
题解:威佐夫博弈的板子题#include<iostream>#include<cstdio>#include<map>#include<algorithm>#include<cmath>#define LL long longusing namespace std;int main(){ int a,b;...原创 2018-09-12 19:52:16 · 162 阅读 · 0 评论 -
博弈论--取石子游戏 HDU - 2516
题解——枚举一下从1到13左右会发现如果当前是斐波那契数必输 转自:https://vjudge.net/contest/244449#problem/R n =2时输出second;n =3时也是输出second;n =4时,第一个人想获胜就必须先拿1个,这时剩余的石子数为3,此时无论第二个人如何取,第一个人都能赢,输出first;n =5时,first不可能获胜,因为他取2...原创 2018-09-12 19:35:29 · 182 阅读 · 0 评论 -
博弈论—— Being a Good Boy in Spring Festival HDU - 1850
题解: 如果所有牌的亦或和为0,必输。想赢必须亦或和大于0,亦或完之后如果大于零,要是让对手输必须拿走一些牌使得剩余牌亦或结果为0,如果一个数字比除这个数字之外的数字的亦或值大,则情况就+1,举个例子,比如5,7,9这个例子,只有9大于5和7的亦或值,所以结果就为1.#include<iostream>#include<cstdio>#include&...原创 2018-09-12 15:50:21 · 168 阅读 · 0 评论 -
博弈论—— Good Luck in CET-4 Everybody! HDU - 1847
题解: 画NP图——举个例子 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16N NPN N PNN P N N P N N P N根据NP图中比盛典和必败点的特点画出来,在这篇博客里有对NP图比较详细的介绍 https://blog.csdn.net/qq_40240576/article/details/82630992画完...原创 2018-09-12 15:35:21 · 183 阅读 · 0 评论 -
博弈论——Find your present! HDU - 1563
题解:对亦或的考查——既然只有一个与其它的不一样,而且其它的成对出现,那就把所有的出现的数字亦或一遍、 最后亦或得到的数字即为答案#include<iostream>#include<cstdio>using namespace std;int main(){ int n,a; while(~scanf("%d",&n)&...原创 2018-09-12 15:17:59 · 194 阅读 · 0 评论 -
博弈论——Paint Chain HDU - 3980
题解: 关键在于SG打表的方式: 每当拿走一个珠子,相当于圆形的串被分割:串长为从1到n-k;然后循环递归求出SG值#include <iostream>#include<cstring>#include<cstdio>#include<algorithm>using namespace std;int T,m,n;int...原创 2018-09-12 15:11:00 · 119 阅读 · 0 评论 -
朋友 HDU - 5963
题解:以每一个点为根时,能不能赢取决于与根相连的点的权重之和,为奇数女孩赢,否则男孩赢#include<bits/stdc++.h>using namespace std;#define mem(a,b) memset(a,b,sizeof(a))#define fread() freopen("in.txt","r",stdin)#define fwrite(...原创 2018-09-06 00:07:27 · 169 阅读 · 0 评论 -
SG打表——Fibonacci again and again HDU - 1848
题解:SG打表 从1到n列出一堆石子所有可能的情况,在搜索小于这个i的所有斐波那契数,标记当前 i 减去斐波那契数产生子局面 的SG值,之后得到当前n的SG值#include<iostream>#include<cstdio>#include<cstring>#define LL long long intusing namespace ...原创 2018-09-11 21:25:20 · 117 阅读 · 0 评论 -
Nim游戏——Rabbit and Grass HDU - 1849
题解:简单的Nim游戏,每个棋子距离做短点的位置看做石子的数量,然后进行亦或就可以#include<iostream>#include<cstring>#include<cstdio>using namespace std;int main(){ int n,a,sum = 0; while(~scanf("%d",&a...原创 2018-09-11 19:37:18 · 134 阅读 · 0 评论 -
Anti_SG--Let's play a game ZOJ - 2507
题解:Anti-SG游戏—谁先走最后一步谁输先手必胜当且仅当:1.石子数全都为1并且SG值为0,2.石子数不全为1并且SG值不为0.要是想了解证明过程,就去阅读贾志豪的博弈论,里面有详细的证明过程。#include<bits/stdc++.h>#include<cstring>using namespace std;#define LL long lon...原创 2018-09-20 09:40:25 · 331 阅读 · 0 评论