原题解链接:https://ac.nowcoder.com/discuss/157310

因为mm是一个偶数,不妨分类讨论:

1.一回合可以直接翻转所有硬币(n=m)(n=m)

很显然,答案YesYes

2.一回合不能直接翻转所有硬币,因为mm是偶数,所以只需要讨论nn的奇偶性。

(1)nn是奇数

某回合结束后所有硬币反面朝上可以等价于所有硬币都被翻转了奇数次。假设可以达成,那么该回合后所有回合总翻转次数一定要为奇数(因为奇数个奇数相加是奇数)然而m是偶数,即使在不使坏的情况下,无论翻转多少个回合,总翻转次数也一定是偶数,所以在这种情况下是不可能赢得游戏的。答案是No

(2)nn是偶数

同理,完成时所有硬币都一定要被翻转了奇数次,但是nn是偶数,所以总翻转次数一定要为偶数,在不被使坏的情况下,至少有可能完成,但是除去n=mn=m的情况外,只要在第一回合后立即被使坏,不管翻转哪一个硬币,都会使得总翻转次数由总是偶数变成总是奇数,和nn为奇数时原理相同,也不可能赢得游戏,答案是NoNo

结论: n=mn=m时答案是YesYes,否则答案是NoNo


#include<bits/stdc++.h>
using namespace std;
void solve(){
    int T,a=0,b=0;
    cin>>T;
    while(T--){
        scanf("%d %d",&a,&b);
        if(a<b||b%2!=0) printf(">>>");
        if(a==b) printf("Yes\n");
        else printf("No\n");
    }
    if(T!=-1) cout<<T<<endl;
}
int main(){
    solve();
}