列表

详情


NC235685. 博弈大师

描述

一堆数量为  的石子摆在牛牛和牛妹面前,由于双方都是博弈大师,它们打算一决高下。
经过双方讨论后决定的游戏规则:采取回合制游戏,双方轮流操作一回合。第  回合的操作者会从石头堆中拿走  个石子  第  回合拿走  个,第  回合拿走  个,以此类推 。若第  回合的时候,石子的总数小于 ,那么该回合的操作者会输掉比赛。由于牛牛是个绅士牛,所以打算第一回合让牛妹先操作,第二回合牛牛操作,第三回合再次轮到牛妹操作。
除此之外,牛牛拥有  张技能卡,牛妹拥有  张。
技能卡的作用:技能卡可以在任意时刻发动,每个回合任意一方可以发动多次,每次消耗一张卡。发动技能卡时,可以改变当前回合的操作者。
例如第  回合是牛牛操作,此时无论谁发动该回合的第一张技能卡,第  回合的操作者就会变成牛妹。如果此时有人发动该回合的第二张卡,那么操作者又会变成牛牛,以此类推,直到该回合双方都不再发动技能卡,此时操作者再进行操作。
需要注意的是,如果该回合使用了卡导致操作者最终发生了改变,那么下一回合的初始操作者也随之改变。例如:第一回合是牛妹操作,牛牛使用了一张卡,这一回合实际操作者是牛牛,那么第二回合的初始操作者就会是牛妹。
问:双方都采取最佳策略,谁会是这场比赛的胜利者?

输入描述

第一行包含一个整数 ,代表询问组数。

接下来  行,每行包含三个整数 ,分别代表  个石子,牛牛拥有  张技能卡,牛妹拥有  张技能卡。

输出描述

输出包含  行,每行输出一个字符串,如果牛牛获胜,输出 “niuniu”,如果牛妹获胜,输出 ”niumei“。不包含引号。

示例1

输入:

3
1 0 0
1 1 0
3 0 1

输出:

niumei
niuniu
niumei

说明:

对于  ,第  回合牛妹拿走  个石子,此时还有  个石子,第  回合石子数量小于  ,该回合操作者是牛牛,牛牛输掉比赛,牛妹获胜。

对于 ,牛牛拥有一张技能卡,在第  回合的时候发动技能卡,让第  回合的操作者变成自己,拿走  个石子,此时还有  个石子,第  回合轮到牛妹,石子数量小于 ,该回合的操作者牛妹输掉比赛,牛牛获胜。

对于 ,牛妹拥有一张技能卡,第  回合牛妹拿走  个石子,第  回合牛妹发动技能卡,再次拿走  个石子,第  回合轮到牛牛,此时石子数量小于 ,该回合的操作者牛牛输掉比赛,牛妹获胜。

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

pypy3 解法, 执行用时: 924ms, 内存消耗: 38180K, 提交时间: 2022-04-22 19:14:07

from math import sqrt, floor
for _ in range(int(input())):
    n, a, b = list(map(int, input().split(' ')))
    if a > b:
        print('niuniu')
    elif a < b:
        print('niumei')
    else:
        x = floor(sqrt(2 * n + 1 / 4) - 1 / 2)

        if x % 2 == 1:
            print('niumei')
        else:
            print('niuniu')

C++ 解法, 执行用时: 419ms, 内存消耗: 1048K, 提交时间: 2022-04-26 08:09:06

#include<bits/stdc++.h>
using namespace std;
int main()
{
	int t;
	cin>>t;
	while(t--)
	{
		long long n,a,b;
		cin>>n>>a>>b;
		if(a>b) cout<<"niuniu";
		else if(a<b) cout<<"niumei";
		else 
		{
			long long s=sqrt(2*n);
			if(s%2==0) cout<<"niuniu";
			else cout<<"niumei";
		}
		cout<<endl;
	}
}

Python3 解法, 执行用时: 746ms, 内存消耗: 5344K, 提交时间: 2022-04-22 19:27:43

for _ in range(int(input())):
    n,a,b=map(int,input().split())
    if a==b:
        c=((1+8*n)**0.5-1)//2
        print('niuniu'if c%2==0 else 'niumei')
    else:
        print('niuniu'if a>b else 'niumei')

上一题