题目链接
题目:
思路:
先找规律叭,先一个一个的枚举。
1.枚举后我们发现: 1 2 3 4 5都是可以一次拿完的。
2.而当到6的时候,我们先手不可能一次性把6拿完,那么必定是后手赢了。//那么我们这里就先可以记住一个分界点了,后面可以以此为基准来判断 : 谁先遇到6,先必输
3.而当 7 8 9 10 11 的时候我先手都可以把他拿到还剩6个,后手不可能拿完,然后再先手一定拿完了。
4.当石子有12的时候,先手无论怎么拿,我不可能让后手先拿到6(因为一次不可能拿去6的倍数)
同理依次往上推,可以推出;当为6的倍数的时候,先手必输,反之先手必胜。
AC代码
#include <bits/stdc++.h>
inline int read(){char c = getchar();int x = 0,s = 1;
while(c < '0' || c > '9') {if(c == '-') s = -1;c = getchar();}
while(c >= '0' && c <= '9') {x = x*10 + c -'0';c = getchar();}
return x*s;}
using namespace std;
#define NewNode (TreeNode *)malloc(sizeof(TreeNode))
#define Mem(a,b) memset(a,b,sizeof(a))
const int N = 1e5 + 5;
const long long INFINF = 0x7f7f7f7f7f7f7f;
const int INF = 0x3f3f3f3f;
const double EPS = 1e-7;
const unsigned long long mod = 998244353;
const double II = acos(-1);
const double PP = (II*1.0)/(180.00);
typedef long long ll;
typedef unsigned long long ull;
typedef pair<int,int> pii;
typedef pair<ll,ll> piil;
int main()
{
std::ios::sync_with_stdio(false);
cin.tie(0),cout.tie(0);
int t;
cin >> t;
while(t--)
{
ll n;
cin >> n;
n % 6 == 0 ? cout << "Roy wins!" << endl : cout << "October wins!" << endl;
}
}