我求求了,谁能帮我做出来啊啊啊
查看原帖
我求求了,谁能帮我做出来啊啊啊
544989
外星球来的人楼主2024/1/19 22:13

大大大胃王 题目描述 大大大胃王比拼已经进入最后的冠亚军争夺战,你和张师傅是仅剩的两位选手。最后比拼的规则如下:共有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;
}

求求了,调两天了,真的求求了

2024/1/19 22:13
加载中...