首页 > 其他分享 >牛牛取石子(对称策略/模拟棋)

牛牛取石子(对称策略/模拟棋)

时间:2023-01-07 15:45:14浏览次数:67  
标签:le 堆取 牛牛 牛妹 石子 两堆 牛牛取 模拟

题目链接

题目描述:

牛牛和牛妹在玩游戏,他们的游戏规则是这样的:
一共有两堆石子,第一堆有 \(a\) 个,第二堆有 \(b\) 个,牛牛和牛妹轮流取石子,牛牛先手,每次取石子的时候只能从以下 \(2\) 种方案种挑一种来取(对于选择的方案数必须保证当前石子 \(≥\) 取的石子个数才能取):

  1. 第一堆取 \(1\) 个,第二堆取 \(2\) 个
  2. 第一堆取 \(2\) 个,第二堆取 \(1\) 个

谁先无法取石子,谁就输了。假设牛牛和牛妹都很聪明,请问谁会获胜?

输入描述:

第一行输入一个正整数 \(T(1 \le T \le 10^5)\),代表数据组数。

接下来 \(T\) 行,每行输入两个整数 \(a,b (1 \le a,b\le 10^{18})\)代表两堆石子的数量。

输出描述:

对于每组数据,输出一行,代表胜利者的名字(牛牛获胜输出niuniu,牛妹获胜输出niumei)。

样例:

input:

2
1 2
3 3

output:

niuniu
niumei

AC代码:

#include <bits/stdc++.h>

using namespace std;

typedef long long LL;

int T = 1;

void solve()
{
	LL a, b;
	scanf("%lld%lld", &a, &b);

	int r = min(a, b) % 3;

	// 如果小的那一堆石子除以3的余数不是0,那么先手只要拿一个或者两个则必定让那堆石子的数量是3的倍数
	// 那么后手不管怎么取,先手只要选择相反的操作那么两堆石子数量都是减3
	// 所以后手必定会先遇到石子被取光的情况
	if(r % 3)
	{
		// 但是有特殊情况,如果余数是1且两堆石子数量相同
		// 一堆石子取1,则另一堆石子的数量就会更少且除以3的余数为2
		// 这时候根据上面的结论,后手必胜
		if(r % 3 == 1 && a == b)
			cout << "niumei" << '\n';
		else 
			cout << "niuniu" << '\n';
	}
	// 如果小的那一堆石子除以3的余数是0,那么只要后手选择与先手相反的操作每次两堆石子数量都是减3
	// 所以先手肯定先会遇到石子数量为0的情况(不论两堆石子一开始的数量是否相等)
	else 
	{
		cout << "niumei" << '\n';
	}
}

int main()
{
	scanf("%d", &T);

	while(T --)
		solve();

	return 0;
}

标签:le,堆取,牛牛,牛妹,石子,两堆,牛牛取,模拟
From: https://www.cnblogs.com/KSzsh/p/17032644.html

相关文章

  • Genymotion模拟器安装
    如果你符合下述三种情况的话,你可以考虑安装一个GenymotionAndroid模拟器:没有真机调试,只能用模拟器嫌SDK内置的AVD启动速度,运行速度慢电脑配置还可以,最好4G内存以上如果你......
  • 模拟库函数qsort
    #include<stdio.h>#include<string.h>structStu{charname[20];intage;};voidSwap(char*buf1,char*buf2,intwidth){inti=0;for(i=0;i<width;i++){cha......
  • 230102模拟题解
    t1容易发现对于奇数和偶数,能满足条件的长度分别是单调的,所以可以分别二分答案检查。检查的时候对于差分序列做哈希即可,然后用set/map/哈希表判\(B\)的子段是否有\(A......
  • 模拟IIC
    /**开引脚的时钟:RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);*/#defineI2C_SCLGPIO_Pin_6#defineI2C_SDAGPIO_Pin_7#defineGPIO_I2CGPIO......
  • 数字振镜与模拟振镜
        激光系统的重要配件:振镜;1998年开始在中国被大规模使用,设计思路参考电流表,内部镜片类似表针,驱动信号由计算机控制的正负5V或正负10V的直流信号驱动,以完成预定动......
  • 解决adb devices无法连接各种模拟器
    经常使用到模拟器的童鞋,如果在使用adbdevices命令时,发现出现“Listofdevicesattached”,模拟器USB调试都开启的情况下,也没有连接成功。这种情况一般都是模拟器adb的版......
  • 模拟退火
    模拟退火是一类随机化玄学算法,当一个问题的方案数量极大而且不是一个单峰函数时,我们常使用其求解。而且一些最优化问题如果想不到正解可以用其玄学骗分(这才是重点)退火是......
  • C语言银行业务模拟系统[2023-01-04]
    C语言银行业务模拟系统[2023-01-04]银行业务模拟系统系统要求使用C语言实现一个银行业务模拟程序,实现存取款等基本业务的模拟。选题者需要首先进行需求调研,了解银行的主......
  • FPGA:乒乓球比赛模拟机的设计
    简介开发板:EGO1开发环境:Windows10+XilinxVivado2020数字逻辑大作业题目7:乒乓球比赛模拟机的设计乒乓球比赛模拟机用发光二极管(LED)模拟乒乓球运动轨迹,是......
  • 《安富莱嵌入式周报》第289期:开源回流焊,首发开源跨平台电路仿真软件,用于电气化学的电
    ​​​​ 视频版:​​https://www.bilibili.com/video/BV1ND4y187ps​​  1、开源回流焊主控Github:​​https://github.com/UnexpectedMaker/ReflowMaster​​网站介绍:​......