题解 P4018 【Roy&October之取石子】
正解:只有是6的倍数就是第二个人赢,否则第一个人赢
解释:
一。首先,1,2,3,4,5都可以一次取到,当n=6时,第一个人先取1-5个,无论怎么取,第二个人全去走就赢了。
二。对于6的倍数,一定不能是质数的K次方,证明:先是除2以外的质数都是奇数,而奇数乘奇数都是奇数,故6的倍数全不是n的K次方;对于2,由于6中存在因数3,故6*n也不是2的K次方。
三。对于12,第一个人取1-5个,第二个人直接取到剩下6个,就变成了情况一,第一个人取不到6个,若去6个以上,则直接败;
四。归纳6*n。第一个人无法去6的倍数个,第二个人只要将数压倒6*m(m<n)就会慢慢推到情况二,就又是第一个人输。
五。对于非6的倍数,第一个人只要去1-5个,使之变成6的倍数,就变成情况四了。
综上:正解成立。
良心AC代码,勿复制
#include<iostream>
using namespace std;
int main()
{
int n,a;
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>a;
if(a%6==0)cout<<"Roy wins!"<<endl;
else cout<<"October wins!"<<endl;
}
}