2071 取石子游戏

来源:互联网 发布:网络代理设置 编辑:程序博客网 时间:2024/06/04 17:56
描述

传说lzx暗地里结交了一个女朋友,今天本来是集训队训练的日子,但是lzx推脱自己有事不能参加,实际上是在陪女朋友玩取石子游戏……

游戏的规则是这样的:

石子一共有两堆,分别有a个和b个石子,两人轮流操作,当轮到自己的回合时,选择一堆石子,然后取走这堆石子里的不超过m个石子,不可以不取,然后变为对手的回合。如果轮到某个人的回合,无石子可取,则这个人输掉这一局游戏。

lzx的女朋友做什么都非常认真,如果输掉任何一局游戏都会很不开心;但同时lzx的女朋友是非常要强的人,她绝不希望lzx在与她的游戏中放水,也就是说,lzx和他的女朋友都会为自己的每一步选择最佳的策略。这下lzx犯难了,他想到的唯一的既让女朋友开心,又不放水的方法,就是把游戏的初始状态设置成让女朋友一定会获胜的情况。于是他自告奋勇的承担了每局比赛设置初始状态的工作……

请你判断,对于已知的a、b、m,以及每局先手操作方,这种情况能否让女朋友必胜呢?

输入

输入的第一行是一个整数,为数据的组数t(t<=500),之后t行每行一组数据。

每组数据包括a、b、m三个整数及一个字符串s,之间均用一个空格隔开。a、b、m的含义如题目描述中所示(0<=a,b<=2^63-1,1<=m<=2^31-1),字符串s代表每局的先手操作方。如果lzx先操作,则字符串s为"lzx",如果是lzx的女朋友先操作,则字符串s为"gf"。

输出

对于每组测试数据,输出一行:

如果这个初始条件能够使得女朋友最终获胜,lzx逃过一劫,输出一行”Oh yeah!”;否则,lzx就免不了跪搓衣板了,输出一行”Oh my god!”。

样例输入
2
1 2 1 gf
1 2 1 lzx
样例输出
Oh yeah!

Oh my god!



博弈论的经典问题


#include<iostream>#include<string>using namespace std;int main(){ int t; cin >> t; for ( int e = 0; e < t; e++ ) {  long long a, b;  int m;   cin >> a >> b >> m;  int am = a % (m+1);  int bm = b % (m+1);  string name;  cin >> name;   if ( name == "lzx" && ((bm ^ am) == 0 ))    cout << "Oh yeah!" << endl;  else if ( name == "gf" && ((bm ^ am )!= 0 ))   cout << "Oh yeah!" << endl;  else    {   cout << "Oh my god!" << endl;   }  }  return 0; }


原创粉丝点击