翻硬幣問題

鏈接:https://ac.nowcoder.com/acm/contest/373/A
來源:牛客網

時間限制:C/C++ 1秒,其他語言2秒
空間限制:C/C++ 32768K,其他語言65536K
64bit IO Format: %lld
題目描述
Alice和Bob正在玩一個很經典的遊戲。

n
n個硬幣初始時全部正面朝上,每一輪Alice必須選擇其中任意的恰好

m
m枚硬幣並將它們全部翻轉,如果若干輪翻轉後所有硬幣全部反面朝上,那麼Alice就贏得了遊戲。
假設我們認爲每枚硬幣只有正面朝上和反面朝上兩種狀態且只考慮

m
m爲偶數的情況,問題會比較簡單。
但是出題人希望這道題更毒瘤一些,所以他增加了一條規則:Bob在整個遊戲中可以有一次機會使壞–在Alice某一輪翻轉完之後,偷偷選擇任意一枚硬幣並將它翻轉。
爲了不讓Alice贏得遊戲,Bob會採取最優的策略。
現在給定

n
n和

m
m,請問Alice是否可以贏得遊戲?
注意:
Bob雖然可以在任何輪翻轉之後使壞,但是在整個遊戲中只有一次這樣的機會。也就是說,如果在某一輪之後使用了這個機會,那麼以後都不能再使用。
輪次可以認爲是無限的,只要在任何一輪翻轉後所有硬幣全部反面朝上,Alice就立即贏得遊戲勝利,Bob即使沒有用掉使壞的機會也不能再偷偷翻轉硬幣。
輸入描述:
每個輸入文件有多個測試樣例。
第一行一個整數

T
(
T

30000
)
T(T≤30000)–測試樣例個數。
然後

T
T行,每行兩個整數

n
n和

m
m

(
1

m

n

10
9
,
m



)
(1≤m≤n≤109,m是偶數)–硬幣的數量和每一輪翻轉硬幣的數量。其中第

i
+
1
i+1行表示第

i
i個樣例。
輸出描述:
輸出

T
T行,第

i
i行輸出第

i
i個測試樣例的答案。
如果Alice可以贏得遊戲輸出“Yes”,否則輸出“No”,請注意區分大小寫。
示例1
輸入
複製
2
2 2
8 6
輸出
複製
Yes
No
說明
對於第一個樣例,Alice直接一輪翻轉全部兩個硬幣就可以贏得遊戲。

對於第二個樣例,Bob如果在第一輪結束後將任意一枚反面朝上的硬幣翻轉,之後Alice無論怎樣翻轉硬幣也永遠不能使得所有硬幣全部反面朝上。

思路:這題挺水的,可能我反應比較慢,遲遲沒看出來規律,還因爲着急WA一發

import java.util.Scanner;
public class Main{
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
        int T=sc.nextInt();
        while(T>0){
            int n=sc.nextInt();
            int m=sc.nextInt();
            if(n==m)
                System.out.println("Yes");
            else
                System.out.println("No");
            T--;
        }
		sc.close();
	}
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章