取石子(二)
- 描述
小王喜歡與同事玩一些小遊戲,今天他們選擇了玩取石子。
遊戲規則如下:共有N堆石子,已知每堆中石子的數量,並且規定好每堆石子最多可以取的石子數(最少取1顆)。
兩個人輪流取子,每次只能選擇N堆石子中的一堆,取一定數量的石子(最少取一個),並且取的石子數量不能多於該堆石子規定好的最多取子數,等哪個人無法取子時就表示此人輸掉了遊戲。
假設每次都是小王先取石子,並且遊戲雙方都絕對聰明,現在給你石子的堆數、每堆石子的數量和每堆石子規定的單次取子上限,請判斷出小王能否獲勝。
- 輸入
- 第一行是一個整數T表示測試數據的組數(T<100)
每組測試數據的第一行是一個整數N(1<N<100),表示共有N堆石子,隨後的N行每行表示一堆石子,這N行中每行有兩個數整數m,n表示該堆石子共有m個石子,該堆石子每次最多取n個。(0<=m,n<=2^31) - 輸出
- 對於每組測試數據,輸出Win表示小王可以獲勝,輸出Lose表示小王必然會敗。
- 樣例輸入
2 1 1000 1 2 1 1 1 1
- 樣例輸出
Lose Lose
- 提示
- 注意下面一組測試數據
2
1 1
2 2
正確的結果應該是Win
因爲小王會先從第二堆石子中取一個石子,使狀態變爲
1 1
1 2這種狀態下,無論對方怎麼取,小王都能獲勝。
解題思路:
題意同上上取石子(六),不過限定了每堆石子最多可以取的石子數(最少爲一),問A是勝還是敗?(第一行是一個整數T表示測試數據的組數(T<100)每組測試數據的第一行是一個整數N(1<N<100),表示共有N堆石子,隨後的N行每行表示一堆石子,這N行中每行有兩個數整數m,n表示該堆石子共有m個石子,該堆石子每次最多取n(0<=m,n<=2^31))
代碼如下:
#include<stdio.h> #include<string.h> int main(){ int nn; scanf("%d",&nn); while(nn--) { int n,a,b,c=0; scanf("%d",&n); while(n--) { scanf("%d%d",&a,&b); a=a%(b+1); c^=a; } if(c) puts("Win"); else puts("Lose"); } }