题意:
给出n个数字的集合;
然后每次可以从中去两个数a和b ,要求这两个的差(大-小)是集合里没有,并把a-b放进数组;
谁最后没有数字可以取就输了;
问先手赢还是先手输;
思路:
首先求所有数字的最大公约数g,和所有数字中的最大值m;
比如最大公约数是2,比如原先数组是2,6,8
那么集合只可能出现2,4,6,8;
同样如果集合的最大公约数是3
那么集合只可能出现3,6,9,12.......
那么m/g就是这个集合最终可以有几个数字;
减掉原有的n个,就是还可以放进去几个;
判断一下奇偶性就知道先手是输是赢了;
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int N = 1005;
int n, num[N];
int gcd(int x, int y) {
return y == 0 ? x :gcd (y, x % y);
}
int main() {
int t;
scanf("%d",&t);
while(t--) {
scanf("%d",&n);
scanf("%d",&num[0]);
int g = num[0];
int m = num[0];
for(int i = 1; i < n; i++) {
scanf("%d",&num[i]);
g = gcd(g,num[i]);
m = max(m, num[i]);
}
if(((m/g) - n) % 2)
printf("Win\n");
else
printf("Lose\n");
}
}