poj 2484 博弈--对称思想 15行代码以内解决

来源:互联网 发布:游戏人物设计软件 编辑:程序博客网 时间:2024/06/10 09:41

题目:http://poj.org/problem?id=2484

题意:n枚硬币排成圈,两人轮流从中取一枚或者两枚硬币。取两枚时,必须取连续的两枚。硬币取走之后留下空位,相隔空位视为不连续。取走最后一枚硬币者获胜。问谁会获胜。
Sample Input
1
2
3
0
Sample Output
Alice
Alice
Bob

代码不难,但是需要动脑子。

这么想,n个硬币排成环,A取一次之后变成了链,B再去一次使这个链成为两条相同的链,那么A再取,B采取与A相同的方法,那么A取完一条链,B就一定取完另一条链,就是说B必胜。

所以代码很简单

#include<cstdio>int main(){    int n;    while(scanf("%d",&n)!=EOF && n)    {        if(n<=2)printf("Alice\n");        else printf("Bob\n");    }    return 0;}

可见博弈的时候,与对手采取相同的策略也是一种很好的思考问题的方法

2 0