POJ 2484 A Funny Game【博弈】

来源:互联网 发布:如何改变睡眠时间 知乎 编辑:程序博客网 时间:2024/05/06 02:20

相比数据结构的题。。感觉这种想啊想的题可爱多了~~~代码量还少。。。。


题目链接:

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

题意:

一圈n个硬币,两人轮流从中取一或两个硬币,(只能取相邻的两枚硬币),取完的获胜,问谁赢?

分析:

这里注意,连续的硬币中取出若干个后,被分割开的就不算连续的硬币了。
首先还是找是否存在对称状态,只要是存在对称状态,后手模仿先手,最后后手必赢。
假设先手第一次拿走了1或者2个硬币,圈被分裂成一条链,后手在链的中间部位拿走1或者2个硬币,将链分为两条对称的子链,这样便出现对称状态了。后手必赢!
但是注意一次是最多可以取2个硬币的,所以在硬币数小于等于2时,先手赢。

代码:

#include<iostream>using namespace std;int main (void){    int n;    while(cin>>n && n){        if(n <= 2) cout<<"Alice"<<endl;        else cout<<"Bob"<<endl;    }    return 0;}

这类游戏就是要找对称状态,然后完全模仿对手,最终必赢!

0 0