码迷,mamicode.com
首页 > 其他好文 > 详细

博弈论------白书

时间:2018-11-03 20:14:15      阅读:141      评论:0      收藏:0      [点我收藏+]

标签:else   有一个   color   ios   \n   std   turn   alice   print   

poj2484

两枚硬币排成一个圈,alice和bob轮流从中取一枚或者两枚硬币。不过,取两枚时,所取的硬币必须是连续的。硬币取走后留下空位,相隔空位的硬币被视为是不连续的。alice开始先取,取走最后一枚硬币的一方获胜。当双方都采取最优策略,谁会获胜。

输入(硬币的个数)(0<=n<=1000000)

输出 赢的人的姓名

首先n的范围过大,不适合采用sg函数打表的方式,如果打表的话,会超时或者超空间,而且最重要的一点是圆排列的变化会有很多

然后圆上有一个对称的特点,可以围绕这个对称的特点展开文章,当对手取走一部分时,你可以取走对称部分的相对应的圆排列,这样可以保证后手必赢,而且有一点可以保证的就是到为奇数的时候,当第一次对手取2个,你可以通过取1个变成对称的情况,而对手取1个,你可以取两个

 1 #include<cstring>
 2 #include<algorithm>
 3 #include<iostream>
 4 #include<cstdio>
 5 using namespace std;
 6 int n;
 7 int main(){
 8     while(scanf("%d",&n)!=EOF){
 9         if(n==0) break;
10         if(n==1||n==2) printf("Alice\n");
11         else printf("Bob\n");
12     }
13     return 0;
14 }

 

博弈论------白书

标签:else   有一个   color   ios   \n   std   turn   alice   print   

原文地址:https://www.cnblogs.com/pandaking/p/9901782.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!