一开始看这道博弈题的时候我就用很常规的思路去分析了,首先先手取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. 关于plsql表如何创建自增长列

    1首先在sequence中创建新序列 在oracle中sequence就是所谓的序列号,每次取的时候它会自动增加,一般用在需要按序列号排序的地方. 这是语句创建 create sequence ide ...

  2. MultiSelectComboBox(一)

    1. MultiSelectComboBox.xaml <UserControl x:Class="MultiSelectComboBox.MultiSelectComboBox&qu ...

  3. 测试post

    http://www.atool.org/httptest.php 这里也可以测试 火狐有插件:HttpRequester Chrome有插件:Postman

  4. Json 入门例子【2】

    <script> var json1 = { "id": 1, "tagName": "apple" }; $("#f ...

  5. 查看C语言的方法名

    1,打开 Visual Studio 2008 x64 Win64 命令提示 2,查看dumpbin  –exports  [C动态库的路径]

  6. KDTree

    学习链接:http://www.cnblogs.com/eyeszjwang/articles/2429382.html 下面实现的kdtree支持以下操作:(1) 插入一个节点(2) 插入n个节点( ...

  7. DIV的表单布局

    表单布局其实用表格最好了,可是表格的话,无法定位,这个是一个硬伤. <!DOCTYPE html> <html> <head> <meta charset=& ...

  8. jquery之 css()方法。用法类似的有attr(),prop(),val()

    [注]attr(),prop(),val()的用法结构和css()一致,可参考 css()函数用于设置或返回当前jQuery对象所匹配的元素的css样式属性值. 该函数属于jQuery对象(实例).如 ...

  9. [UVa1210]Sum of Consecutive Prime Numbers(前缀和,打表)

    题目链接:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem ...

  10. mimikatz2.0抓取WINDOWS密码

    看吾爱的,刚好问同事说这个也用过,以后内网渗透的话比较方便 http://www.52pojie.cn/thread-264895-1-1.html ========================= ...