[luogu4018][Roy&October之取石子]

题目链接

思路

这个题思路挺巧妙的。
情况一:
首先如果这堆石子的数量是1~5,那么肯定是先手赢。因为先手可以直接拿走这些石子。如果石子数量恰好是6,那么肯定是后手赢。因为先手无论怎样拿也无法直接拿走六个石子。
情况二:
考虑继续推广,如果石子数是7~11,那么先手也能赢。因为先手可以先拿成6,然后就变成了情况1。如果石子数是12,那么一定是后手赢。因为根据上面讨论,当石子数量为6的时候,此时的先手一定输。如果石子数量为12,那么现在的人无论如何也无法拿成6,所以肯定会输。
结论
如果石子数是6的倍数,那么此时的先手会输。如果不是6的倍数,那么现在的先手可以把石子拿成6的倍数,并且另一个人变成先手。所以此时后手赢

代码

#include<cstdio>
#include<iostream>
#define fi(s) freopen(s,"r",stdin);
#define fo(s) freopen(s,"w",stdout);
using namespace std;
typedef long long ll;
ll read() {
    ll x = 0,f = 1;char c = getchar();
    while(c < '0' || c > '9') {
        if(c == '-') f = -1;
        c = getchar();
    }
    while(c >= '0' && c <= '9') {
        x = x * 10 + c - '0';
        c = getchar();
    }
    return x * f;
}
int main() {
    int t = read();
    while(t--) {
        ll n = read();
        if(!(n % 6)) puts("Roy wins!");
        else puts("October wins!");
    }
    return 0;
}

每篇一言

一旦下雨,路上就充满肮脏和泥泞 ——从你的全世界路过

全部评论

相关推荐

Noob1024:一笔传三代,人走笔还在
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务