?这题,是为模拟题,模拟一遍过程就行了;
写一个判断当前状态已经为必输的函数judge;
然后用循环模拟过程:
#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std;
int x, y;
/*
判断当前局面是否必输
必输有两种情况:一种是钱不够220 另外一种是是10块的不足2张(无法凑出220的零头)
*/
bool judge()
{
if (100 * x + 10 * y >= 220 && y >= 2) return true;
return false;
}
int main()
{
cin >> x >> y;
int turn = 0; // 轮次,0 小马哥, 1 gqs
int winner; // 赢家,0 小马哥, 1 gqs
while (1)
{
if (!judge())
{
winner = (turn + 1) % 2;
break;
}
if (turn == 0)
{
if (x >= 2) x-= 2, y -= 2; // 优先拿x, x >= 2 拿2张;否则全拿;剩下的用y补足
else y -= 22 - 10 * x, x = 0;
}
else
{
if (y >= 22) y -= 22; // 优先拿y, y >= 22; y >= 12; y < 12
else if (y >= 12) y -= 12, x -= 1;
else x -= 2, y -= 2;
}
turn = (turn + 1) % 2;
}
if (winner) puts("gqs");
else puts("xmg");
return 0;
}
|