HDU1907 John

news/2025/2/21 12:57:24

HDU1907 John

题目大意

J o h n John John和弟弟玩游戏。有 n n n堆石子,每个玩家轮流从其中一堆取若干个,取到最后一棵石子的人失败。 J o h n John John先手,双方都采用最优策略,问谁能获胜,如果 J o h n John John能获胜则输出 J o h n John John,否则输出 B r o t h e r Brother Brother


题解

首先,如果这 n n n堆石子中每堆石子都只有一个石子,那么显然当 n n n为偶数时先手必胜, n n n为奇数时后手必胜。

如果存在至少一堆石子的石子数量大于一个,那么

  • 如果只有一堆石子数大于一,先手可以选择对这堆石子全部取完或留一个来保证自己必胜
  • 如果有多堆石子数量大于一且当前石子数量的异或和不为0,那么只需保证在到达第一个状态之前你操作后石子数量的异或和等于0即可。因为每次对方都会使得石子异或和不为0,那么得到第一种情况的一定就是先手,那么先手必胜

所以,先手必胜的条件为

  • 如果这 n n n堆石子中每堆石子都只有一个石子,则 n n n为偶数
  • 如果存在至少一堆石子的石子数量大于一个,则石子数的异或和不为0

code

#include<iostream>
#include<cstdio>
using namespace std;
int T,n,ans,fl,a[55];
int main()
{
	scanf("%d",&T);
	while(T--){
		ans=0;fl=0;
		scanf("%d",&n);
		for(int i=1;i<=n;i++){
			scanf("%d",&a[i]);
			if(a[i]>1) fl=1;
			ans^=a[i];
		}
		if(fl&&ans||!fl&&n%2==0) printf("John\n");
		else printf("Brother\n");
	}
	return 0;
}

http://www.niftyadmin.cn/n/225904.html

相关文章

mysql 实现先排序再分组

查询出不同性别中的年龄最大的名字 u_gender、 u_age、 u_name GROUP_CONCAT 结合SUBSTRING_INDEX 实现 查某个字段 select SUBSTRING_INDEX(GROUP_CONCAT(u_name order by u_age desc),,,1) as username from user group by u_gender查全部信息 SELECT * FROM user WHERE id I…

你还不会Typescript吗?(六)工作原理相关概念

类型推断 常见推断 类型推断(type inference)&#xff0c;TS 会自动的去尝试分析变量的类型。例如&#xff1a; // 这就是典型的类型推断&#xff0c;它们的类型是 number 而且值永远都不会变的 const firstnumber 1 const secondNumber 2 const total firstNumber seco…

ROS2 入门应用 引用自定义服务(Python)

ROS2 入门应用 引用自定义服务&#xff08;Python&#xff09;1. 查看自定义消息2. 修改服务应答3. 修改服务请求4. 修改依赖关系5. 编译和运行1. 查看自定义消息 引用在《ROS2 入门应用 创建自定义接口》中自定义的 服务AddThreeInts.srv ros2 interface show tutorial_inte…

STM32实验-高级定时器输出指定个数PWM

STM32F103ZET6中有TIM1,TIM8两个高级定时器&#xff0c;每一定时器都有 1、一个16位向上、向下、向上/下自动装载计数器 2、一个16位预分频器和四个独立从输入输出通道 3、每一个通道都可用于输入捕获、输出比较、PWM和单脉冲模式&#xff08;除了基本定时器&#xff0c;高级定…

如何在低代码平台上构建ERP软件?

ERP软件是企业管理日常运营需求的关键组件。然而&#xff0c;对于许多企业&#xff0c;尤其是资源有限的企业来说&#xff0c;尝试构建和管理ERP平台可能要担负较高的成本的。幸运的是&#xff0c;低代码平台可以使这个过程变得容易得多。今天我们来解释如何在低代码平台上构建…

EdiText限制输入字符类型

android实现在EditText中限制输入字符类型&#xff1a; 例如&#xff1a;只允许输入 数字、字母、汉字。 直接上代码&#xff1a; 1、设置监听&#xff1a; editText.addTextChangedListener(mTextWatch); 2、监听中处理校验字符&#xff1a; private TextWatcher mTextWa…

java编译和运行带有包名的类

写在前面 对于习惯了使用ide的我们似乎早已经忘记了如何通过命令行来编译和运行java类了&#xff0c;至少我是这样的&#xff0c;本文就一起来回顾下吧&#xff01; 1&#xff1a;运行不带包的类 这种相信大多数朋友都记得&#xff0c;直接javac yourCode.java,然后java you…

算法训练营笔记day45|139. 单词拆分

139. 单词拆分 题目连接 笔记 class Solution { public:bool wordBreak(string s, vector<string>& wordDict) {unordered_set<string> wordSet(wordDict.begin(), wordDict.end());vector<bool> dp(s.size() 1, false);dp[0] true;for (int i 1; …