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')