洛谷 P4018 Roy&October之取石子 题解
博弈论经典题。
结论:如果 \(6|n\),Roy 赢,否则 October 赢。
证明:
-
如果 \(n=1\sim5\),显然存在 \(p^k=n\),可以一次全部拿完,先手赢。当 \(n=6\) 时,不存在 \(p^k=n\),先手拿 \(1\sim5\) 个,其余后手一次拿完,后手赢。
-
质数除了 \(2\) 都是奇数,由奇数乘奇数等于奇数可知奇数的任意次方是奇数。又因 \(6\) 含有因子 \(3\),不可能是 \(2\) 的幂,得出\(n\) 是 \(6\) 的倍数时,一定不存在 \(p^k=n\)。
-
因此想赢只需保证每次自己取完是 \(6\) 的倍数即可。如果 \(6|n\),先手无法一次取 \(6\) 的倍数,后者赢。否则先手可以先取 \(n\%6\) 个以保证每次取完剩 \(6\) 的倍数个,先手赢。证毕。
#include<iostream>
#include<cstdio>
using namespace std;
int t,n;
int main()
{
scanf("%d",&t);
while(t--)
{
scanf("%d",&n);
n%6==0?printf("Roy wins!\n"):printf("October wins!\n");
}
return 0;
}

浙公网安备 33010602011771号