Beautiful Sequence 2023牛客暑期多校训练营7 C

登录—专业IT笔试面试备考平台_牛客网

题目大意:给出一长度n-1的数组b,要求构造一个长度为n的数组a,满足a[i]^a[i+1]=b[i],a[i]<=a[i+1],求字典序第k小的数组

1<=n<=1e6;0<=a[i],b[i]<=2^{30}

思路:因为a[1]^a[2]=b[1],a[2]^a[3]=b[2]...a[i]^a[i+1]=b[i],我么对整个式子两边求异或和可得a[1]^a[i+1]=sum[i],其中sum[i]表示b的异或前缀和,所以只要我们确定了a[1],就能确定所有的a[i],那么我们考察每个a[i]怎么构造,使其满足递增的条件。

要递增,a[i]和a[i+1]的最高位要么应该相同,要么a[i]是0,a[i+1]是1,所以我们先找到a[i]和a[i+1]最高的不同位,也就相当于找sum[i]和sum[i-1]的最高不同位,如果sum[i]最高位=1,那么a[1]这一位应该是0,这样a[i+1]这一位就是1,如果sum[i]最高位=0,那么a[1]这一位应该是1,这样a[i+1]这一位就是1,而如果这一位的情况之前已经确定过了,且当前情况与之前的不符,那么就输出-1。

然后再考虑第k小,我们直接把k二进制拆分,然后依次填入a[1]中没有被确定的位置即可,最后有a[1]再构造除整个a数组,期间注意判断a[i]的范围有没有超过2^{30}

//#include<__msvc_all_public_headers.hpp>
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 1e6 + 5;
ll b[N];
ll sum[N];
ll ans[N];
void solve()
{
	ll n, k;
	cin >> n >> k;
	for (int i = 1; i < n; i++)
	{
		cin >> b[i];
		sum[i] = sum[i - 1] ^ b[i];//求前缀异或和
	}
	vector<bool>a(60), vis(60);
	for (int i = 1; i <= n-1; i++)
	{//枚举每一个a[i+1]
		for (int j = 29; j >= 0; j--)
		{//找最高不同位
			if ((sum[i] >> j & 1) != (sum[i - 1] >> j & 1))
			{
				int temp = sum[i] >> j & 1 ^ 1;//a[1]的这一位应该与sum[i]取反
				if (vis[j] && temp != a[j])
				{
					cout << -1 << endl;
					return;
				}
				a[j] = temp;
				vis[j] = 1;
				break;
			}
		}
	}
	k--;
	int dig = 0;
	while (k)
	{//将k的二进制表达插入a[1]中
		while (vis[dig])
			dig++;
		int x = k & 1;
		a[dig] = x;
		dig++;
		k >>= 1;
	}
	ans[1] = 0;
	for (int i = 30; i >= 0; i--)
	{//有a[1]的二进制求出其十进制表达
		ans[1] *= 2;
		ans[1] += a[i];
	}
	for (int i = 2; i <= n; i++)
	{
		ans[i] = ans[i - 1] ^ b[i - 1];
		if (ans[i] > 1 << 30)
		{//判断得到的a[i]在不在给定范围内
			cout << -1 << endl;
			return;
		}
	}
	for (int i = 1; i <= n; i++)
	{
		cout << ans[i] << " ";
	}
	cout << endl;
}
int main()
{
	int t;
	cin >> t;
	while (t--)
	{
		solve();
	}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/67944.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

MySQL:表的约束和基本查询

表的约束 表的约束——为了让插入的数据符合预期。 表的约束很多&#xff0c;这里主要介绍如下几个&#xff1a; null/not null,default, comment, zerofill&#xff0c;primary key&#xff0c;auto_increment&#xff0c;unique key 。 空属性 两个值&#xff1a;null&am…

04.利用Redis国逻辑过期实现缓存功能---解决缓存击穿

学习目标&#xff1a; 提示&#xff1a;学习如何利用Redis逻辑过期实现添加缓存功能解决缓存击穿 学习产出&#xff1a; 缓存击穿讲解图&#xff1a; 解决方案&#xff1a; 采用互斥锁采用逻辑过期 1. 准备pom环境 <dependency><groupId>org.springframework…

【java】java项目在idea中Build Project或Rebuild Project一直进行不完

问题场景 我项目进行重新构建的时候&#xff0c;项目构建到某一个位置就一直不动了 解决方法 1.清理idea缓存 2.加大idea的内存 File -> Setting

Mybatis-plus 异常:Not Found TableInfoCache

标题&#xff1a;Mybatis-plus 异常&#xff1a;Not Found TableInfoCache Mybatis-plus 是一个流行的基于 Mybatis 的增强工具包&#xff0c;可以极大地简化数据库操作。然而&#xff0c;在使用 Mybatis-plus 过程中&#xff0c;可能会遇到一些异常情况&#xff0c;其中之一就…

【MySQL】MySQL 数据类型

目录 1. tinyint 类型 2. bit 类型 3. 小数类型 1、float 类型 2、decimal 类型 3. 字符串类型 1、char 类型 2、varchar 类型 4. 日期类型 5. enum和set 1、枚举和集合类型语法 2、枚举和集合类型的查找 6、find_in_set 函数 写在最后&#xff1a; 1. tinyint …

产品体系架构202308版

1.前言 当我们不断向前奔跑时&#xff0c;需要回头压实走过的路。不断扩张的同时把相应的内容沉淀下来&#xff0c;为后续的发展铺垫基石。 不知从何时起&#xff0c;产品的架构就面向了微服务/中台化/前后端分离/低代码化/分布式/智能化/运行可观测化的综合体&#xff0c;让…

Docker制作SpringBoot镜像

Dcokerfile目录 编写Dockerfile FROM openjdk:8 #发布到网上时只会把jar包和Dockerfile发布上去RUN mkdir -p /opt/javaCOPY app.jar /opt/java/app.jar #地址映射 #CMD ["--server.port8080"] #对外暴露端口(可以任意修改) EXPOSE 15009 #执行命令 #ENTRYPOINT [&q…

渗透攻击方法:原型链污染

目录 一、什么是原型链 1、原型对象 2、prototype属性 3、原型链 1、显示原型 2、隐式原型 3、原型链 4、constructor属性 二、原型链污染重现 实例 Nodejs沙箱逃逸 1、什么是沙箱&#xff08;sandbox&#xff09; 2、vm模块 一、什么是原型链 1、原型对象 JavaS…

指针---进阶篇(二)

指针---进阶篇&#xff08;二&#xff09; 前言一、函数指针1.抛砖引玉2.如何判断函数指针&#xff1f;&#xff08;方法总结&#xff09; 二、函数指针数组1.什么是函数指针数组&#xff1f;2.讲解函数指针数组3.模拟计算器&#xff1a;讲解函数指针数组 三、指向函数指针数组…

JVM笔记 —— 出现内存溢出错误时时如何排查

一、出现内存溢出的几种情况 内存溢出错误分为StackOverflowError和OutOfMemoryError&#xff0c;前者是栈中出现溢出&#xff0c;后者一般是堆或方法区出现溢出&#xff0c;简称OOM 1. 栈溢出 StackOverflowError 栈溢出一般都是因为没有正确的结束递归导致的&#xff0c;无…

Python-OpenCV中的图像处理-图像阀值

Python-OpenCV中的图像处理-图像阀值 图像阈值单阈值自适应阈值Otsus二值化 图像阈值 单阈值 与名字一样&#xff0c;这种方法非常简单。但像素值高于阈值时&#xff0c;我们给这个像素赋予一个新值&#xff08;可能是白色&#xff09;&#xff0c;否则我们给它赋予另外一种颜…

PHP流浪动物招领网站mysql数据库web结构apache计算机软件工程网页wamp

一、源码特点 PHP流浪动物招领网站 是一套完善的web设计系统&#xff0c;对理解php编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。 下载链接 nullhttps://download.csdn.net/download/qq_41221322/88190168视频演示 …

10倍提升效率,号称取代Elasticsearch?

[Manticore Search](https://github.com/manticoresoftware/manticoresearch/) 是一个使用 C 开发的高性能搜索引擎&#xff0c;创建于 2017 年&#xff0c;其前身是 Sphinx Search 。Manticore Search 充分利用了 Sphinx&#xff0c;显着改进了它的功能&#xff0c;修复了数百…

linux环形缓冲区kfifo实践4:异步通知fasync

基础知识 异步通知在内核中使用struct fasync_struct数据结构来描述。 <include/linux/fs.h> struct fasync_struct {spinlock_t fa_lock;int magic;int fa_fd;struct fasync_struct *fa_next; /* singly linked list */struct file *fa_file;struct rcu_head fa…

手搓 自然语言模型 LLM 拆分em结构设计 网络参数对比

数据 数据集 新的em编码参数表 voc_sizehidden_sizetotaltotal Bmax_lensecondsdays65536512374865920.03749B10242560.2655361024828375040.08284B20485120.5655362048<

Grafana Prometheus 通过JMX监控kafka

第三方kafka exporter方案 目前网上关于使用Prometheus 监控kafka的大部分资料都是使用一个第三方的 kafka exporter&#xff0c;他的原理大概就是启动一个kafka客户端&#xff0c;获取kafka服务器的信息&#xff0c;然后提供一些metric接口供Prometheus使用&#xff0c;随意它…

WebRTC | 音视频直播客户端框架

端到端通信互动技术可分解为以下几个技术难点&#xff1a;客户端技术、服务器技术、全球设备网络适配技术和通信互动质量监控与展示技术。 一、音视频直播 音视频直播可分成两条技术路线&#xff1a;一条是以音视频会议为代表的实时互动直播&#xff1b;另一条是以娱乐直播为代…

新法!《个人信息保护合规审计管理办法(征求意见稿)》解读

8月3日&#xff0c;依据《中华人民共和国个人信息保护法》等法律法规&#xff0c;国家互联网信息办公室起草了《个人信息保护合规审计管理办法&#xff08;征求意见稿&#xff09;》&#xff08;下文简称“办法”&#xff09;&#xff0c;并向社会公开征求意见。 据悉&#xff…

基于SpringBoot+LayUI的宿舍管理系统 001

项目简介 源码来源于网络&#xff0c;项目文档仅用于参考&#xff0c;请自行二次完善哦。 系统以MySQL 8.0.23为数据库&#xff0c;在Spring Boot SpringMVC MyBatis Layui框架下基于B/S架构设计开发而成。 系统中的用户分为三类&#xff0c;分别为学生、宿管、后勤。这三…

MySQL多表连接查询

目录 表结构 创建表 表数据插入 查询需求 1.找出销售部门中年纪最大的员工的姓名 2.求财务部门最低工资的员工姓名 3.列出每个部门收入总和高于9000的部门名称 4.求工资在7500到8500元之间&#xff0c;年龄最大的人的姓名及部门 5.找出销售部门收入最低的员工入职时间…