[hdu1847]博弈,推理】的更多相关文章

题意:一堆石子,有n个,两个人轮流取,每次都只能取2的幂次方个数,不能取的人输 思路:首先0是必败态,2的所有幂次都是必胜态.由于选的数模3只能是1或2,恰好又都是2的幂次,0,.3都为必败态,猜想3的所有倍数也为必败态,证明如下:设状态为x=3k,先手任选一个t,那么(x-t)%3不是1就是2,后手就取(x-t)%3,使得先手面临的状态始终是3的倍数,并且只要先手可以取,那么后手也就可以取,所以3的倍数都是必败态.对于x=3k+p,p=1或2的状态,先手都可以将其变成必败态,即先手取p=x%3…
Good Luck in CET-4 Everybody! Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 9039    Accepted Submission(s): 5848 Problem Description 大学英语四级考试就要来临了,你是不是在紧张的复习?也许紧张得连短学期的ACM都没工夫练习了,反正我知道的Kiki和Ci…
题目: 给两个整数a和b,两个人先后用较大的数减去较小数的整数倍,并且保证相减后为非负数.先把一个数变为0的人获胜. 分析: 很显然,当大数是小数的整数倍时为必胜态. 从这道题学会一个叫做自由度的东西,感觉能够为博弈推理提供思路. 博弈基本就是一个推理必胜态和必败态的过程.自由度越低越好推理. 不妨假设b为两个数中的较大数. 如果b-a<a 那么只能选择用b去减a,如果后继态是必胜态,那么该状态是必败态,否则就是必胜态. 如果b-a>a呢? 我们怎么能够转移到自由度较低的情况. 假设x是是的b…
搜集一些算法,赛前背一背有好处的 转自各大网站 前排感谢:hzwer.风了咕凉 前辈...Orz 快速读入: int read() { ,f=;char ch=getchar(); ;ch=getchar();} +ch-';ch=getchar();} return x*f; } 经典快排:虽说C++直接sort就好了... #include <iostream> using namespace std; void Qsort(int a[], int low, int high) { if…
ZZNUOJ-2157: 水滴来袭 那是一个冷雨霏霏的秋天的下午,当罗辑拿着枪威胁三体文明的时候,如果过了三十秒三体人还没有同他展开谈判,罗辑就会扣动扳机即刻结束自己的生命,随后他身上的核弹控制器就会检测不到他的生命体征进而按照设定引爆数千万枚核弹,这些排列有序的核弹会以某种原理(具体见原著)向银河系范围公布三体世界的坐标,来自黑暗森林法则的力量就会摧毁掉整个三体星系和太阳系(在太阳系的三体舰队也无法存活). 在通过量子通讯实时得到了这则消息后,作为三体第一舰队的指挥官慌得一批,精通逻辑分析能力…
大学英语四级考试就要来临了,你是不是在紧张的复习?也许紧张得连短学期的ACM都没工夫练习了,反正我知道的Kiki和Cici都是如此.当然,作为在考场浸润了十几载的当代大学生,Kiki和Cici更懂得考前的放松,所谓"张弛有道"就是这个意思.这不,Kiki和Cici在每天晚上休息之前都要玩一会儿扑克牌以放松神经.  "升级"?"双扣"?"红五"?还是"斗地主"?  当然都不是!那多俗啊~  作为计算机学院的学…
http://acm.hdu.edu.cn/showproblem.php?pid=1847 从1开始枚举情况,找规律.1先手胜2先手胜3先手败4先手胜5先手胜... n只要能转移到先手败,就可以实现先手胜,否则n情况下就是先手败.发现规律时%3 #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #include<cstdlib> #include&…
题意:给定n张牌,两个人轮流摸牌,每次摸牌张数为2的幂次,问先手胜还是后手胜  n≤1000 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1847 #include<iostream> #include<cstdio> #include<algorithm> #include<cmath> #include<cstring> #include<vector> using namespa…
这是我见过的最简单的一道博弈了,其实不要被复杂的棋盘吓到了. 首先肯定会有而且仅有一个人胜,而且因为棋盘是对称的,所以先手相对于后手肯定更有优势,那么肯定是先手赢. 这是不是严格的推理,但是确实比较容易猜出答案. 题外话:既然这游戏这么坑,为什么两个人还能玩得不亦乐乎.. #include <cstdio> int main() { int n; ) puts("I bet on Oregon Maple~"); ; } 代码君…
转自http://blog.sina.com.cn/s/blog_63e4cf2f0100tq4i.html 今天在POJ做了一道博弈题..进而了解到了阶梯博弈...下面阐述一下我对于阶梯博弈的理解..  首先是对阶梯博弈的阐述...博弈在一列阶梯上进行...每个阶梯上放着自然数个点..两个人进行阶梯博弈...每一步则是将一个集体上的若干个点( >=1 )移到前面去..最后没有点可以移动的人输.. 如这就是一个阶梯博弈的初始状态 2 1 3 2 4 ... 只能把后面的点往前面放...如何来分析…