2018年全国多校算法寒假训练营练习比赛(第三场)D、小牛vs小客
*博弈问题:
*直线排列的石头1……n,n为1、2时,显然先手胜;
* n>2时,n=2k+1时,先手取第k+1颗石头,将石头分为两段:1……k,k+2……2k+1;如果后手在其中一段取石头,那么先手在另外一段仿照先手的操作,使得两段石头排列的情况依然相同。最终收尾的一定是先手;
n=2k+2时,同理先手取第k+1、k+2颗石头,仍然分为两段,先手获胜;
所以直线排列n颗石头,每次取任意1颗或连续的两颗石头,最后取完的人获胜,一定是先手获胜!
只有n=1、2时,小牛才能一次取完;n>2时,无论小牛取哪1或2颗石头,石头排列都会变为直线排列,小客是先手;那么小客一定获胜!
#include <iostream>
using namespace std;
int main(){
int n;
while(cin>>n){
if(n<3)cout<<"XiaoNiu"<<endl;
else cout<<"XiaoKe"<<endl;
}
return 0;
}