
博弈论
BEconfidence
坚持才是胜利之道
展开
-
HDU 3951 Coin Game (博弈)
又是一道博大精深的博弈题目。 已经说了 巴什博弈,威佐夫博弈,尼姆博弈,SG函数,找规律的博弈,这次和找规律有点类似——对称博弈。 一般都是圆啊方啊什么的。 对于这道题而言,可以有三种情况: ①k等于1 一次最多只能拿1个(每堆只有一个),那就是看奇偶了。 ②n≤k 这种情况,那肯定先拿的赢。 ③ 这条就是对称博弈了, 除了上述两种情况外的情原创 2015-05-06 20:42:02 · 688 阅读 · 0 评论 -
hdu1079 Calendar Game(博弈)
典型的博弈论,算法思路为在初始化的过程中便获得2001.11.4到1990.1.1期间所有日期的胜败情况。对于y-m-d日期,若其下一天和下一月中有一个为必败情况,则今天为必胜。若两者均为必胜,则今天为必败。主要难度在于前一日(getDayBefore)和后一月(isValidNextMonth)日期的判定,要注意闰年情况的特殊性。 虽然说这样可行。但是,网上给出了另外一种巧解,如下。从后往前原创 2015-06-03 13:34:11 · 812 阅读 · 0 评论 -
poj 2505 A multiplication game(博弈)
还的确是一个稍有难度博弈的问题(这个可不属于博弈中的任何一个): 题意:游戏规则为:两个人在2-9选数选出之后与p相乘,此时p=p*(2...9);当p>=n时这一方获胜。。 分析: 如果输入是 2 ~ 9 ,(2~9)因为Stan 是先手,所以Stan 必胜 如果输入是 10~18 ,(9+1~9*2)因为Ollie 是后手,不管第一次Stan 乘的是什么原创 2015-06-03 21:34:43 · 602 阅读 · 0 评论 -
HUD2188 悼念512汶川大地震遇难同胞——选拔志愿者(巴什博奕)
#include int main() { int C,n,m; scanf("%d",&C); while(C--){ scanf("%d%d",&n,&m); if(n%(m+1)==0) printf("Rabbit\n"); else printf("Grass\n"); } return 0; }原创 2015-06-02 20:42:24 · 674 阅读 · 0 评论 -
HDU2149 Public Sale(巴什博奕)
才直到这种问题叫巴什博奕 换是老问题 多了一个第一次报价的输出取值 我分了两种情况 1.N》=M时 ,应该是输出M,M+1,...N 2.N (s来源于公式M%(N+1) == s) #include int main() { int M,N; while(scanf("%d%d",&M,&N)!=EOF){ if(M%(N+1)==0) printf原创 2015-06-02 20:27:32 · 711 阅读 · 0 评论 -
HDU1850 Being a Good Boy in Spring Festival
解题报告:题目的意思很简单!就是一个Nim博弈!但是不是问谁获胜,本题而是问的获胜的方法有多少种!首先,我们必须知道,因为是起手,对于M堆扑克,最多有M种获胜的方法!对res = M1 ^ M2 ^ M3 …. ^ Mm取异或(^)得res,由异或的性质知:res ^ Mi = ( M1 ^ M2 …^M(i-1) ^ M(i+1) ^ … ^Mm ) ,也就是说res对任意一个数取^可以原创 2015-06-02 22:19:00 · 644 阅读 · 0 评论 -
HDU1849 Rabbit and Grass()
用异或看取得的值是否为0判断 思想换没搞懂 #include int main() { int ans,n,a; while(scanf("%d",&n),n){ ans=0; while(n--){ scanf("%d",&a); ans=ans^a; } if(a原创 2015-06-02 22:11:03 · 767 阅读 · 0 评论 -
hdu1848 Fibonacci again and again(SG函数博弈)
现在换是看不明白SG函数的求法什么的 暂时先当模板题吧 函数mex1就是求g(x) 然后异或 #include #include #include #include using namespace std; int k,fibo[100],f[10001]; int mex1(int p){ int i,t; bool g[101]={0}; for(i=0;i<k原创 2015-06-02 22:00:58 · 764 阅读 · 0 评论 -
hdu2147 kiki's game(博弈)
这个是纳什博弈?不知道怎么看的 根据PN图,从左下角开始推 左下角P 最后一行都是PNPNPN 第一列都是 P N P N P 完了填完就行了 #include int main() { int n,m; while(scanf("%d%d",&n,&m)&&n&&m){ if(n&1&&m&1) printf("What a pity!\n"原创 2015-06-02 21:28:54 · 561 阅读 · 0 评论 -
SG模板
首先定义mex(minimal excludant)运算,这是施加于一个集合的运算,表示最小的不属于这个集合的非负整数。例如mex{0,1,2,4}=3、mex{2,3,5}=0、mex{}=0。 对于一个给定的有向无环图,定义关于图的每个顶点的Sprague-Grundy函数g如下:g(x)=mex{ g(y) | y是x的后继 },这里的g(x)即sg[x] 例如:取石子问题,有1原创 2015-05-31 22:42:19 · 522 阅读 · 0 评论 -
hdu1847 Good Luck in CET-4 Everybody!(博弈论)
仔细想这个和前面那个一样 让对方面对一个数值(包括倍数)时,对面就是输了 因为: 对面拿一个数,但是拿不了这个数值 我拿完后补全这个数值 对面那sb还是面对这个值 这个题的数值是3 #include int main() { int n; while(~scanf("%d",&n)){ if(n%3) printf("Kiki\n原创 2015-05-31 22:10:09 · 594 阅读 · 0 评论 -
hdu1856 Brave Game(博弈论)
应该是最基础的那种博弈论的题 (m+1)+多余 == n 如果没有多余,那么就后手赢了 #include int main() { int n; scanf("%d",&n); while(n--){ int x,p; scanf("%d%d",&x,&p); if(x%(p+1)==0 ) printf("secon原创 2015-05-31 21:47:25 · 573 阅读 · 0 评论 -
zoj博弈月赛
Help Bob Time Limit: 2 Seconds Memory Limit: 65536 KB There is a game very popular in ZJU at present, Bob didn't meant to participate in it. But he decided to join it after discovering a lo原创 2015-07-26 13:53:25 · 786 阅读 · 0 评论