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

2014-11-24 10:15:47 · 作者: · 浏览: 2

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

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

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

所以代码很简单

#include
  
   

int main()
{
    int n;

    while(scanf(%d,&n)!=EOF && n)
    {
        if(n<=2)printf(Alice
);
        else printf(Bob
);
    }

    return 0;
}

  

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