假设A,B二人玩游戏,本题A方取胜条件是A方取走糖果后剩下1颗糖果,B方同理。
假设A方先手,在A方的视角下若想确保最后一次取得糖果后仅剩一颗,则只需确保在对方倒数第二次取糖果前,剩下 (m+1+1) 个糖果即可,此时无论对方取多少,我总可以使其剩下一颗。
一共有n个糖果,设常数k(正整数), d,存在 n=d+k(m+1)+1 ,(d<m+1) ,如果A想赢,则需第一次确保拿走d的同时,让对方占有之后的 m+1 个糖果的先手权,在这种情况下我只需每一轮将该轮B拿完 m+1 后剩下的部分即可。
若p=0(A有一次取两次的机会),则上述情况可以实现(将d取掉即可),此时仅需确保A拿一次不会全部拿完,即n>1;
若p=1(B有一次取两次的机会),则无论A第一次拿多少,B总能用两次拿糖果的机会,使A占有之后的 m+1 个糖果的先手权(因为2m>=(d-1)+(m+1)),此时A唯一获胜条件就是 1<n<=m (A先手,总能在一次内拿剩下一个)
int main(){
std::ios::sync_with_stdio(false);
int num;
cin >> num;
int n, m, p;
while(num--){
cin >> n >> m >> p;
if(m>=n && n!=1) cout << "XiaoNian";
else if(p==0 && n>m) cout << "XiaoNian";
else if(p==1 && m+1==n) cout << "XiaoNian";
else cout << "YangQiShaoNian";
cout << endl;
}
return 0;
}