问题 D: 取石子之fans
时间限制: 1 Sec 内存限制: 64 MB提交: 57 解决: 26
[提交][状态][讨论版]
题目描述
Yougth和Hrdv玩一个游戏,拿出n个石子摆成一圈,Yougth和Hrdv分别从其中取石子,谁先取完者胜,每次可以从中取一个或者相邻两个(注意不是“两个”而是“相邻两个”),Yougth先取,两个人足够聪明,不会拿错。输出胜利者的名字。
输入
输入包括多组测试数据。
每组测试数据一个正整数n,数据保证int范围内。
输出
输出胜利者的名字。
样例输入
2 3
样例输出
Yougth Hrdv
这个题可以看成是对称的博弈。可以这样想,将这堆石子分成两堆完全相等的石子堆,无论自己做出什么状态的策略,对方只要在另一堆采取相同的策略就可以回到初始状态(双方相等的状态),最后自己这一堆先没了石子,对手则取走对手堆的最后一块,所以这是必败态,而面对N>2 石子 对手都可以使之变成两堆相等的石子,做出对称状态在完全模拟对手常常是有效的
#include<stdio.h> #include<string.h> #include<stdlib.h> #include<math.h> #include<stack> #include<queue> #include<vector> #include<algorithm> using namespace std; int main() { int n,i,j; while(~scanf("%d",&n)){ if(n<=2) printf("Yougth "); else printf("Hrdv "); } return 0; } /************************************************************** Problem: 1548 User: 2016207228 Language: C++ Result: 正确 Time:0 ms Memory:1084 kb ****************************************************************/