大大大胃王 题目描述 大大大胃王比拼已经进入最后的冠亚军争夺战,你和张师傅是仅剩的两位选手。最后比拼的规则如下:共有n种口味的汉堡,其中第i种口味的汉堡初始量为a[i]个。两人轮流操作,每个人的操作可以是吃汉堡,或者是分汉堡。
吃汉堡:可以在剩下汉堡里,选择任意一种口味的汉堡,吃掉任意多个。
分汉堡:可以在剩下汉堡里,选择一种口味的所有汉堡,个数必须不少于2个。将这种汉堡分成两堆,每堆个数都不少于1个。每堆加一种新调料,从而产生新的两种汉堡。
若哪个人无法操作了,就输了。现在轮到你是第一个操作了,请问你有没有必胜策略?
输入输出格式 输入格式 输入文件stomach.in 每个输入文件里共有T组测试数据,第一行输入正整数T,T<=10。接着共有T组数据,每组数据第一个数为正整数n,代表初始汉堡种类,n<=10000。随后一行为n个正整数代表每种的初始数量,均不超过2^31-1。 输出格式 输出文件stomach.out 共输出T行,每一行为WIN或者LOSE代表是否有必胜策略。 输入输出样例 输入样例#1: 2 3 1 2 3 2 1 1 输出样例#1: WIN LOSE
#include<bits/stdc++.h>
using namespace std;
// 计算Nim游戏的SG函数值
int sg(int x) {
if (x == 0) {
return 0;
} else if (x % 4 == 3) {
return x + 1;
} else if (x % 4 == 1) {
return x - 1;
} else {
return x;
}
}
int main() {
freopen("stomach.in","r",stdin);
freopen("stomach.out","w",stdout);
int T;
cin >> T;
while (T--) {
int n;
cin >> n;
int result = 0;
for (int i = 0; i < n; i++) {
int x;
cin >> x;
result ^= sg(x); // 计算每种汉堡的SG函数值并进行异或运算
}
if (result != 0) {
cout << "WIN" << endl;
} else {
cout << "LOSE" << endl;
}
}
return 0;
}
求求了,调两天了,真的求求了