一开始看这道博弈题的时候我就用很常规的思路去分析了,首先先手取1或者2个coin后都会使剩下的coin变成线性排列的长条,然后无论双方如何操作都是把该线条分解为若干个子线条而已,即分解为若干个子游戏而已,我想起刘汝佳的大白书上有类似的例题(不过复杂好多),于是便用同样的方法去做了,以sg(x)表示当前连续x个coin的状态的sg函数值,则当从左侧起分别取一个或相邻的两个时,不难得出其后继状态:sg(y)^sg(x-1-y)(0<=y<=(x-1)/2),sg(y)^sg(x-2-y)(0<=y<=(x-2)/2),在这里因为每次操作都把某段连续的x个coin分解为两段coin(当从头或尾取时即分解为0和x-1或x-2这两段coin),所以要用异或(^),详见大白书的sg定理(游戏和的sg函数等于各子游戏sg函数的Nim和。这样,就可以把各个子游戏分而治之)。推到这里后,就可以用递推求出每个sg(x)的值(不用递归,因为y总是比x小的,求解顺序已经很明显):

 bool vis[];
int sg[]= {,,}; void init(int n= ){
for(int i=; i<=n; ++i){
memset(vis,,sizeof(vis));
for(int j=; j<=(i-)/; ++j)
vis[sg[j]^sg[i--j]]= ;
for(int j=; j<=(i-)/; ++j)
vis[sg[j]^sg[i--j]]= ;
for(int k=; ; ++k)
if(!vis[k]){
sg[i]= k;
break;
}
}
}

  在这里为什么只求出n=10000的数据呢?因为当n=10^5时已经很慢了,我暂时也不知道怎么优化程序使其加速,所以只好先打表找规律了,无奈我输出了前100+的sg函数还是看不出有什么规律,可是当我看到当n大于0时好像所有的sg函数都不为0,而先手无论如何取总会把该环变成一个长条的,那就是说先手必败咯?带着这个疑问我再认真分析了下,确实如果对于一开始是操作一个长条的的话,先手是必胜的,因为只需从中间取1或者2个coin使其变成左右两端数量相等的coin,那么就转变为一个很弱智的问题了。分析到这里后我才猛然醒悟,当先手取后(coin环变成了线性排列的coin),这时后手只需如上述所说从中间截断把它变成两段相等的coin即可(至于如何变看x的奇偶性取1或2即可)。有了这个大胆的猜想后,我试着用代码提交:

 #include<cstdio>

 int main(){
int n;
while(~scanf("%d",&n),n)
puts(n>?"Bob":"Alice");
return ;
}

  然后,竟然过了!!实在太吃惊了,竟然是如此的一道神题,不用想得这么复杂的,好吧,以后分析类似的题目当钻进死胡同时不妨跳出来重新审视下题意,尝试用最简单的方法去思考,也未尝不可。

  (因为今天的天气问题,手指不是很灵活,草草写好的博客,将就着看下吧~~)

POJ 2484 A Funny Game(神题!)的更多相关文章

  1. poj 1011 Sticks ,剪枝神题

    木棒 Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 118943 Accepted: 27429 Description 乔治拿 ...

  2. BUAA 724 晴天小猪的神题(RMQ线段树)

    BUAA 724 晴天小猪的神题 题意:中文题,略 题目链接:http://acm.buaa.edu.cn/problem/724/ 思路:对于询问x,y是否在同一区间,可以转换成有没有存在一个区间它 ...

  3. poj 3080 Blue Jeans(水题 暴搜)

    题目:http://poj.org/problem?id=3080 水题,暴搜 #include <iostream> #include<cstdio> #include< ...

  4. Bzoj 4408: [Fjoi 2016]神秘数 可持久化线段树,神题

    4408: [Fjoi 2016]神秘数 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 177  Solved: 128[Submit][Status ...

  5. 【CF913F】Strongly Connected Tournament 概率神题

    [CF913F]Strongly Connected Tournament 题意:有n个人进行如下锦标赛: 1.所有人都和所有其他的人进行一场比赛,其中标号为i的人打赢标号为j的人(i<j)的概 ...

  6. [agc007f] Shik and Copying String 模拟神题

    Description ​ "全"在十分愉快打工,第0天,给了他一个仅有小写字母构成的长度为N的字符串S0,在之后的第i天里,"全"的工作是将Si−1复制一份到 ...

  7. AtCoder 神题汇总

    记录平时打 AtCoder 比赛时遇到的一些神题. Tenka1 Programmer Contest 2019 D Three Colors 题目大意 有 $n$ 个正整数 $a_1, a_2,\d ...

  8. hdoj5821【贪心-神题】

    啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊,比赛的时候直接读错题了,实力带坑队友.... 题意: 有两个序列都代表筐,每个筐里只有一个球,然后序列的值代表筐里的球的颜色,问你在m次操作后,a序列的球能否变成b ...

  9. [Bzoj4817] [Sdoi2017]树点涂色 (LCT神题)

    4817: [Sdoi2017]树点涂色 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 629  Solved: 371[Submit][Status ...

随机推荐

  1. Find them, Catch them

    Find them, Catch them Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 36488 Accepted: 111 ...

  2. Oracle数据库的启动与停止

    oracle linux下开启与关闭 .启动ORACLE监听 首先要登录用户oracle:su - oracle oracle@localhost bin]$ lsnrctl --启动oracle监听 ...

  3. NSIS学习记录の----NSIS多语言安装以及详解

    NSIS多语言安装,很多教程提供了详细的代码,但是代码中某些语句的含义我还是不很明白,作为一个吃螃蟹的人,我做一个解释,避免很多小伙伴和我哟U一样的误区,以下结论都是自己根据实践得来,若发现理解错误, ...

  4. 2016年11月12日 星期六 --出埃及记 Exodus 20:3

    2016年11月12日 星期六 --出埃及记 Exodus 20:3 "You shall have no other gods before me.除了我以外,你不可有别的 神.

  5. iq 格式分析

    po iq {type:1 name:iq xml:"<iq xmlns="jabber:client" to="testhjy@ecouser.net/ ...

  6. 用Maonry如何实现UIScrollView

    一,使用UIScrollView 与其他View 布局不同的地方在于, ScrollView的高度/宽度不固定: ScrollView的高度和宽度由其内容决定(即 Scroll View 的 cont ...

  7. Mysql压测工具mysqlslap 讲解

    在mysql5.1以后的版本:客户端带了个工具mysqlslap可以对mysql进行压力测试: 可以使用mysqlslap --help来显示使用方法: Default options are rea ...

  8. SqlSever基础 len函数 返回一个字符串的长度

    镇场诗:---大梦谁觉,水月中建博客.百千磨难,才知世事无常.---今持佛语,技术无量愿学.愿尽所学,铸一良心博客.------------------------------------------ ...

  9. 企业邮件服务器被列入RBL,申请撤销PBL指控

    1.登录[url]http://www.spamhaus.org/pbl/index.lasso[/url],在红框中输入企业电子邮件服务器MX记录地址:

  10. 从Unity学UE(一)之蓝图类的使用----制作一个可控灯光

    转自:http://blog.csdn.net/u011707076/article/details/44171829 首先申明,本文章内容适合有Unity引擎基础的童鞋享用,如果不了解Unity引擎 ...