蓝桥杯每日一题2023.9.21

2023-09-21 14:02:06

蓝桥杯2021年第十二届省赛真题-异或数列 - C语言网 (dotcpp.com)

题目描述

Alice 和 Bob 正在玩一个异或数列的游戏。初始时,Alice 和 Bob 分别有一个整数 a 和 b,有一个给定的长度为 n 的公共数列 X1, X2, · · · , Xn。
Alice 和 Bob 轮流操作,Alice 先手,每步可以在以下两种选项中选一种:
选项 1:从数列中选一个 Xi 给 Alice 的数异或上,或者说令 a 变为 a ⊕ Xi。(其中 ⊕ 表示按位异或)
选项 2:从数列中选一个 Xi 给 Bob 的数异或上,或者说令 b 变为 b ⊕ Xi。
每个数 Xi 都只能用一次,当所有 Xi 均被使用后(n 轮后)游戏结束。游戏结束时,拥有的数比较大的一方获胜,如果双方数值相同,即为平手。
现在双方都足够聪明,都采用最优策略,请问谁能获胜?

分析

分析可知a ^ b = x1 ^ x2 ^ ... ^ xn

从高位向低位看,如果a,b两数相同则异或结果为0,如果a,b两数不同则异或结果为1,最先找到是1的那一方选手获胜。

两人是任意选择异或的数,也就是谁能得到最后一个1谁就可以获胜,eg1.如果现在a的值为0,b的值为0,现在A可以拿到最后一个1,a可以变为1,而b为0,A获胜。 eg2.如果现在a的值为1,b的值为1,A拿到最后一个1,可以将b的值变为0,此时A获胜。

 如果x == 1,那么先手必胜A必胜

如果x > 1, 如果y为偶数,A必胜(A先拿随意给人,每次和B对称拿,最后A一定拿最后一个1

                 如果y为奇数,B必胜(因为第一轮AB都拿变成偶数个0和偶数个1,此时A先拿,B总能                   拿到最后一个1)

#include<bits/stdc++.h>
using namespace std;
const int N = 22;
int t, n, x, sum;
int main()
{
	cin >> t;
	while(t --)
	{
		cin >> n;
		sum = 0;
		int cnt[N] = {0};
		for(int i = 1; i <= n; i ++)
		{
			cin >> x;
			sum ^= x;
			for(int j = 0; j < N; j ++)
			{
				cnt[j] += x >> j & 1;//将每一位是1的数取出,此位上1的个数+1 
			}
		}
		if(!sum)cout << 0 << '\n';
		else
		{
			for(int i = N - 1; i >= 0; i --)
			{
				if(sum >> i & 1)
				{
					if(cnt[i] == 1)cout << 1 << '\n';
					else if((n - cnt[i]) % 2 == 0)cout << 1 << '\n';
					else cout << -1 << '\n';
					break;
				}
			}
		}
	}
	return 0;	
} 
更多推荐

传统的经典问题 Java 的 Interface 是干什么的

传统的经典问题Java的Interface是干什么解答上面的这个问题应该还是比较好回答的吧。只要你做过Java,通常Interface的问题多多少少会遇到,而且可能会遇到一大堆。在JAVA编程语言中是一个抽象类型(AbstractType),它被用来要求类(Class)必须实现指定的方法,使不同类的对象可以利用相同的界

Dubbo源码理解

这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,

MySQL索引、事务与存储引擎

索引事务存储引擎一、索引1.1索引的概念1.2索引的实现原理1.2索引的作用1.3创建索引的依据1.4索引的分类和创建1.4.1普通索引index1.4.2唯一索引unique1.4.3主键索引primarykey1.4.4组合索引(单列索引与多列索引)1.4.5全文索引fulltext1.5查看索引1.6删除索引二、

聚类-kmeans

聚类算法是无监督学习算法,指定将数据分成k个簇。然后通过每个点到各个簇的中心的欧氏距离来分类。kmeans本身会陷入局部最小值的状况,二分kmeans可以解决这一点。二分kmeans是遍历所有的簇,将其分成2个,比较哪一个分裂结果更好,用距离和来代表误差例如现在只有一个簇A,第一轮分裂成A,A1,下一次比较A,A1两个

PB转纯BS工具

pbtowebConvertPowerbuilderUItowebAutomatically.源码地址:GitHub-pcwe2002/pbtoweb:automaticallyconvertPowerbuilderUItoweb支持转换控件WindowDataWindowCommandButtonCheckBoxRa

ES6中新增加的Symbol数据类型及其使用场景

聚沙成塔·每天进步一点点⭐专栏简介在这里插入图片描述⭐ES6中的Symbol数据类型⭐对象属性名称⭐防止属性冲突⭐内置Symbols⭐迭代器和生成器⭐写在最后⭐专栏简介前端入门之旅:探索Web开发的奇妙世界记得点击上方或者右侧链接订阅本专栏哦几何带你启航前端之旅欢迎来到前端入门之旅!这个专栏是为那些对Web开发感兴趣、

华为云云耀云服务器L实例评测|基于L实例安装Prometheus+Grafana插件实现数据可视化监控

文章目录一、云耀云服务器介绍二、安装Prometheus创建prometheus.service配置文件启动prometheus服务查看prometheus服务进程三、安装node_exporter下载node_exporter组件包创建node_exporter.service配置文件启动node_exproter服

Docker 存储驱动解析:选择最适合你的存储方案

🌷🍁博主猫头虎带您GotoNewWorld.✨🍁🦄博客首页——猫头虎的博客🎐🐳《面试题大全专栏》文章图文并茂🦕生动形象🦖简单易学!欢迎大家来踩踩~🌺🌊《IDEA开发秘籍专栏》学会IDEA常用操作,工作效率翻倍~💐🌊《100天精通Golang(基础入门篇)》学会Golang语言,畅玩云原生,走遍大

安果浏览器-这才是好用的安卓浏览器。

视频演示:安果浏览器,当之无愧的人民浏览器_哔哩哔哩_bilibili下载地址:安果移动☆一览无余的美观界面:深度优化的用户界面,为您带来简洁而不简单的浏览体验。无论是设计还是功能,安果浏览器都为您考虑到了细节。每一次滑动,每一个点击,都是为了给您带来更好的体验。☆秒速加载,畅快体验:厌倦了等待的时长?安果浏览器利用先

Java 字节流

一、输入输出流输入输出-------读写文件输入-------从文件中获取数据到自己的程序中,接收处理【读】输出-------将自己程序中处理好的数据保存到文件中【写】流-------数据移动的轨迹二、流的分类按照数据的移动轨迹分为:输入流输出流按照每一次读写/数据量的大小将流分成:字节流字符流字节流:每一次可读写一个

使用Canvas绘制一个验证码组件

使用Canvas绘制一个验证码组件前言验证码,这一日常伴随我们的要素,是我们在线交互的重要安全保障。你的手机短信里是否被它占据半壁江山,今天我们就来聊聊如何在网页上实现一个简单的验证码组件。大家在登录网站时为了防止被恶意攻击或者多次点击操作,使用验证码是最常用的实现方式。在学习完Canvas后,通过Canvas实现简单

热文推荐