
博弈
Roly_Yu
快码佳编
展开
-
HDU(2188)悼念512汶川大地震遇难同胞——选拔志愿者
/* 典型的巴什博奕。*/#include #include #include string.h> #include #include #include #include #include using namespace std; int main() { int t; scanf("%d",&t); while(t--){原创 2014-03-14 17:22:20 · 555 阅读 · 0 评论 -
HDU(2509) Be the Winner /HDU(1907) John (Nim 博弈)
/* 尼姆博奕(Nimm Game):有三堆各若干个物品,两个人轮流从某一堆取任意多的物品,规定每次至少取一个,多者不限,最后取光者得胜。 这种情况最有意思,它与二进制有密切关系,我们用(a,b,c)表示某种局势,首先(0,0,0)显然是奇异局势,无论谁面对奇异局势,都必然失败。第二 种奇异局势是(0,n,n),只要与对手拿走一样多的物品,最后都将导致(0,0,0)。仔细原创 2014-03-14 17:22:01 · 584 阅读 · 0 评论 -
HDU(1525)Euclid's Game
#include #include #include string.h> #include #include set> using namespace std; int main() { int a,b; while(scanf("%d%d",&a,&b)&&(a+b)){ if(ab) swap(a, b); int fl原创 2014-03-14 17:22:03 · 441 阅读 · 0 评论 -
HDU(1850) Being a Good Boy in Spring Festival (博弈)
/* 每一堆的数值与ans相异或,所得的结果就是这一堆可以取的数量。 但是,如要这一堆数量没有这么多,就不可以这么取 异或运算本身就是互逆运算 */ #include using namespace std; int value[101]; int main (){ int n,sum,count,i; while (cin>>n && n){原创 2014-03-14 17:22:14 · 503 阅读 · 0 评论 -
FZU Problem 1534 阿甘的珠宝 (博弈)
题目:http://acm.fzu.edu.cn/problem.php?pid=1534 巴什博奕和尼姆博弈的综合。 这里分为最后拿胜利,最后拿失败,分别是nim 和 anti-nim。 SG(n) = n%3 #include #include string.h> #include #include using namespace std; const int m原创 2014-03-14 17:22:22 · 1223 阅读 · 0 评论 -
HDU(1517)A Multiplication Game(博弈)
题目:http://acm.hdu.edu.cn/showproblem.php?pid=1517 题意:2 个人玩游戏,从 1 开始,轮流对数进行累乘,直到超过一个指定的值。 [2,9] Stan wins. [10,18] Ollie wins. [19,162] Stan wins. [162,324]Ollie wins. ... ... #include #原创 2014-03-14 17:22:16 · 539 阅读 · 0 评论 -
HDU(1849)Rabbit and Grass(博弈)
尼姆博弈,并且SG(n) = n #include #include #include string.h> #include #include #include #include #include using namespace std; int main (){ int n,m; while(scanf("%d",&n)&&n){原创 2014-03-14 17:22:18 · 595 阅读 · 0 评论 -
HDU(2897)邂逅明下
巴什博奕的变形。 只有一堆n个物品,两个人轮流从这堆物品中取物,规定每次至少取p个,最多取q个。最后取光者得输。 显然,如果n=r*(p+q)+s , 即s = n%(p+q). # n%(p+q) == 0 先手一定赢,假设先手第一次拿q个,接着每次不管后手拿多少个,假设后手拿k个,先手都可以拿p+q-k 个,所以最后一定剩下p个给后手,所以先手必胜。原创 2014-03-14 17:22:10 · 561 阅读 · 0 评论 -
HDU(1536)S-Nim (博弈)
这道题是对SG函数的考查 #include #include #include string> #include string.h> #include #include #include #include #include #include #include using namespace std; const int maxn=10005; in原创 2014-03-14 17:22:24 · 591 阅读 · 0 评论 -
HDU(1851) A Simple Game (博弈)
任给N堆石子,两人轮流从任一堆中任取(每次只能取自一堆),规定每方每次最多取K颗,取最后一颗石子的一方获胜.问先取的人如何获胜? 巴什博奕和尼姆博弈的综合。 令Bi=Mi mod(Li+1) 定义T‘=B1 xor B2 xor ... xor Bn 如果T‘=0 那么没有获胜可能,先取者必败 如果T’>0 那么必然存在取的方法,使得T‘=0,先取者有获胜的方法 假设对方取了在Mi中取原创 2014-03-14 17:22:12 · 543 阅读 · 0 评论 -
poj 1067
题目:http://poj.org/problem?id=1067 有两堆各若干个物品,两个人轮流从某一堆或同时从两堆中取同样多的物品,规定每次至少取一个,多者不限,最后取光者得胜。 这种情况下是颇为复杂的。我们用(ak,bk)(ak ≤ bk ,k=0,1,2,...,n)表示两堆物品的数量并称其为局势,如果甲面对(0,0),那么甲已经输了,这种局势我们称为奇异局势。前几个奇异局势是:原创 2014-03-13 14:14:47 · 523 阅读 · 0 评论