牛客小白月赛65——D-牛牛取石子
链接:https://ac.nowcoder.com/acm/contest/49888/D
来源:牛客网
牛牛和牛妹在玩游戏,他们的游戏规则是这样的:
一共有两堆石子,第一堆有 aaa 个,第二堆有 bbb 个,牛牛和牛妹轮流取石子,牛牛先手,每次取石子的时候只能从以下 222 种方案种挑一种来取(对于选择的方案数必须保证当前石子 ≥\ge≥ 取的石子个数才能取):
1. 第一堆取 111 个,第二堆取 222 个
2. 第一堆取 222 个,第二堆取 111 个
谁先无法取石子,谁就输了。假设牛牛和牛妹都很聪明,请问谁会获胜?
一共有两堆石子,第一堆有 aaa 个,第二堆有 bbb 个,牛牛和牛妹轮流取石子,牛牛先手,每次取石子的时候只能从以下 222 种方案种挑一种来取(对于选择的方案数必须保证当前石子 ≥\ge≥ 取的石子个数才能取):
1. 第一堆取 111 个,第二堆取 222 个
2. 第一堆取 222 个,第二堆取 111 个
谁先无法取石子,谁就输了。假设牛牛和牛妹都很聪明,请问谁会获胜?
输入描述:
第一行输入一个正整数 T(1≤T≤105)T(1 \le T \le 10^5)T(1≤T≤105) ,代表数据组数。
接下来 TTT 行,每行输入两个整数 a,b(1≤a,b≤1018)a,b (1 \le a,b\le 10^{18})a,b(1≤a,b≤1018) 代表两堆石子的数量。
输出描述:
对于每组数据,输出一行,代表胜利者的名字(牛牛获胜输出niuniu,牛妹获胜输出niumei)。
示例1
## 分析
这道题目是一道博弈论的题目,富含思维,同时也涉及对称策略(模仿棋)
#include<iostream> #include<string> using namespace std; void xian() { puts("niuniu"); } void hou() { puts("niumei"); } int T; long long a, b; int main() { cin >> T; while (T--) { scanf("%lld%lld", &a, &b); int r = min(a, b) % 3; if (r) { if (r = 1 && a == b)hou(); else xian(); } else { hou(); } } return 0; }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)