POJ Matches Game

news/2025/2/23 0:23:44/

目录

1.题目

2.中文翻译

3.思路解析

        3.1 题目来源

        3.2 异或操作

4.代码(python)


1.题目

Matches Game

Time Limit: 1000MSMemory Limit: 65536K
Total Submissions: 14934Accepted: 8570

Description

        Here is a simple game. In this game, there are several piles of matches and two players. The two player play in turn. In each turn, one can choose a pile and take away arbitrary number of matches from the pile (Of course the number of matches, which is taken away, cannot be zero and cannot be larger than the number of matches in the chosen pile). If after a player’s turn, there is no match left, the player is the winner. Suppose that the two players are all very clear. Your job is to tell whether the player who plays first can win the game or not.

Input

        The input consists of several lines, and in each line there is a test case. At the beginning of a line, there is an integer M (1 <= M <=20), which is the number of piles. Then comes M positive integers, which are not larger than 10000000. These M integers represent the number of matches in each pile.

Output

        For each test case, output "Yes" in a single line, if the player who play first will win, otherwise output "No".

Sample Input

2 45 45
3 3 6 9

Sample Output

No
Yes

2.中文翻译

题目描述

        这里有一个简单的游戏。在这场比赛中,有几堆火柴和两名选手。两个人轮流上场。在每一轮中,人们可以选择一个桩,并从该桩中拿走任意数量的匹配(当然,被拿走的匹配数量不能为零,也不能大于所选火柴堆中的数量)。如果在一个玩家回合后,没有剩下的火柴,该玩家就是赢家。假设两位选手都很清楚。你的工作是判断先上场的球员是否能赢得比赛。

输入

        输入由几行组成,每行中都有一个测试用例。在一条线的开头,有一个整数M(1<=M<=20),这是火柴堆的数量。然后是M个正整数,它们不大于10000000。这M个整数表示每个堆中的火柴数。

输出

        对于每个测试用例,如果先玩的玩家获胜,则在一行中输出“是”,否则输出“否”。

样例输入

2 45 45
3 3 6 9

样例输出

No
Yes

3.思路解析

        3.1 题目来源

        这道题可以使用博弈论的思想来解决。对于每一堆火柴棍,我们将其视为一个独立的游戏,用 Nim 游戏来分析。

        在 Nim 游戏中,假设当前有 n 个石子,两个玩家轮流操作,每次可以取走任意多个石子,但不能不取。那么无论双方如何操作,最后剩下一个石子的玩家获胜。

        Nim 游戏有一个重要的特性:当且仅当所有堆的石子数量的异或和等于 0 时,先手必败。否则,先手必胜。

        基于以上思路,我们可以将每一堆火柴棍的数量进行异或运算,然后判断异或结果是否为 0。如果是 0,则先手必败,输出 "No";如果不是 0,则先手必胜,输出 "Yes"。

        3.2 异或操作

         在Python中,异或操作使用符号"^"表示。异或运算是一种逻辑运算符,用于比较两个操

  作数的每一位。它的规则如下:

  • 如果两个操作数的对应位相同,则结果为0。
  • 如果两个操作数的对应位不同,则结果为1。
  • 当一个数与0进行异或操作时,结果将保持不变。(适用于任何进制)

4.代码(python)

while True:result=0#控制输入 n表示火柴堆的数量 seq存储每一个火柴堆n,*seq=map(int,input().split())#在Python中,0与任何数进行异或操作的结果仍然是那个数本身for i in seq:result^=i#根据题意控制输出if result==0:print("No")else:print("Yes")

 


http://www.ppmy.cn/news/403840.html

相关文章

【Linux】文件描述符与重定向操作

系列文章 收录于【Linux】文件系统 专栏 对于Linux下文件的写入与读取&#xff0c;以及文件原理还有疑惑的可以看看上一篇文章浅谈文件原理与操作。 目录 系列文章 再谈文件描述符 ​编辑 IO函数的本质 一切皆文件 文件重定向 原理 系统接口 再谈文件描述符 &#x…

sqli-labs靶场通关(21-30)

Less-21 还是adminadmin登录 可以看出uname是base64加密过的&#xff0c;解码得到&#xff1a;admin。 那么本关和less-20相似&#xff0c;只是cookie的uname值经过base64编码了。 抓包看一下也是如此 那么我们只需要上传paylaod的时候base64加密一下就可以了 base64加密工…

数智赋能与低代码:是医药行业的创新引擎还是心魔歧途

医药行业在当下科技水平的推动下实现了突破性的进展&#xff0c;提高了疾病的治疗效果、加速了新药的开发速度&#xff0c;并为病患提供了更便捷、个性化的医疗服务。当前科技水平下的医药行业正在经历快速的发展和创新。AI 在医药研发、诊断和治疗方面扮演着重要角色。机器学习…

华为OD机试真题 JavaScript 实现【查找两个字符串a,b中的最长公共子串】【牛客练习题】

一、题目描述 查找两个字符串a,b中的最长公共子串。若有多个&#xff0c;输出在较短串中最先出现的那个。 注&#xff1a;子串的定义&#xff1a;将一个字符串删去前缀和后缀&#xff08;也可以不删&#xff09;形成的字符串。请和“子序列”的概念分开&#xff01; 数据范围…

MySQL查看和修改最大连接数

标题&#xff1a;MySQL查看和修改最大连接数 MySQL 是一种广泛使用的开源关系型数据库管理系统&#xff0c;被许多应用程序用作其后端存储解决方案。在高并发的环境下&#xff0c;MySQL 的最大连接数变得尤为重要。本文将介绍如何查看当前的最大连接数&#xff0c;并详细说明每…

AIGC和虚拟现实为什么必然产物

背景 在流量存量时代&#xff0c;内容运营重要性不言而喻。在流量时代&#xff0c;内容可以不要过于多样化和差异化&#xff0c;只需要有足够多的人流量&#xff0c;按流量转化比率来看&#xff0c;1000个人有1%概率转化&#xff0c;素材不变只要增加足够多的流量那就一定会有…

邓铎:探索书法艺术的新境界

中国书画院院士邓铎&#xff0c;是一位在书法艺术领域拥有深刻理解和丰富实践经验的老者。他的作品随心所欲&#xff0c;个性鲜明&#xff0c;具备独特的审美品味和艺术手法&#xff0c;更有重要的理论创新&#xff0c;让书法艺术大放光彩。 邓铎的书法作品在形式上追求“形似象…

19、ADS使用记录之窄带F类功放设计

19、ADS使用记录之窄带F类功放设计 基于CGH40010F 说在前面的话&#xff1a; 博主也是刚刚接触RF PA&#xff0c;在写这篇F类功放时有非常多疑问。抛开连续F类、拓展连续F类、高阶拓展连续F类、高阶混合拓展连续F类功放不谈&#xff0c;单说普普通通的窄带F类&#xff0c;很多…