HDU 1851 (N个BASH博弈子游戏)
题意:n堆石子,分别有M1,M2,·······,Mn个石子,各堆分别最多取L1,L2,·····Ln个石头,两个人分别取,一次只能从一堆中取,取走最后一个石子的人获胜。后选的人获胜输出Yes,否则输出No,
第一行一个数字表示数据有多少组,每组测试数据第一行是一个整数n,表示有n行,然后n行分别是两个整数Mi,Li. 表示第i堆有Mi个石子,一次最多取Li个石子。
Sample Input
2 // T
1 // n
5 4 // m l
2
1 1
2 2
Sample Output
Yes
No
1 # include <iostream> 2 # include <cstdio> 3 # include <cmath> 4 # include <algorithm> 5 using namespace std ; 6 7 int main () 8 { 9 int T ; 10 scanf("%d" , &T) ; 11 while (T--) 12 { 13 int n ,i , m , l ; 14 int ans = 0 ; 15 scanf("%d" , &n) ; 16 for (i = 1 ; i <= n ; i++) 17 { 18 scanf("%d %d" , &m , &l) ; 19 ans ^= (m % (l + 1)) ; 20 } 21 if (ans == 0) //后者胜 22 printf("Yes\n") ; 23 else 24 printf("No\n") ; 25 } 26 27 return 0 ; 28 }