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

news2024/11/17 15:47:58

登录—专业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();
	}
}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

快速引流推广,快速引流推广策略分享,教你精准引流

科思创业汇 大家好&#xff0c;这里是科思创业汇&#xff0c;一个轻资产创业孵化平台。赚钱的方式有很多种&#xff0c;我希望在科思创业汇能够给你带来最快乐的那一种&#xff01; 在当今互联网的快速发展中&#xff0c;短视频脱颖而出&#xff0c;成为互联网的新秀&#xf…

Python-OpenCV中的图像处理-几何变换

Python-OpenCV中的图像处理-几何变换 几何变换图像缩放图像平移图像旋转仿射变换透视变换 几何变换 对图像进行各种几个变换&#xff0c;例如移动&#xff0c;旋转&#xff0c;仿射变换等。 图像缩放 cv2.resize() cv2.INTER_AREAv2.INTER_CUBICv2.INTER_LINEAR res cv2.r…

PDCA、4Y(循环质量管理)

PDCA是什么&#xff1f; PDCA是由英语单词Plan(计划)、Do(执行)、Check(检查)和Act(修正)的第一个字母组成的&#xff0c;PDCA是按照这样的顺序进行质量管理的循环。PDCA四个英文字母及其在PDCA循环中所代表的含义如下&#xff1a; P&#xff08;Plan&#xff09;&#xff1a…

做电商的老哥注意,不干的淘宝产品记得下架,别被薅羊毛了

我是卢松松&#xff0c;点点上面的头像&#xff0c;欢迎关注我哦&#xff01; 提醒所有电商人&#xff1a;不干了就把链接下架&#xff0c;别被薅羊毛了。 关注卢松松的人都知道&#xff0c;虽然卢松松不做电商&#xff0c;但我还是有好几个店铺的。6月份我的某一个僵尸店铺就…

PROFIBUS-DP主站转ETHERCAT网关连接西门子支持ethercat吗

大家好&#xff0c;今天要给大家介绍一款捷米的神秘产品&#xff0c;它的名字叫JM-DPM-ECT&#xff0c;是一款兼具PROFIBUS-DP主站功能的通讯网关。想象一下&#xff0c;它既能和PROFIBUS总线打交道&#xff0c;又能与ETHERCAT网络愉快地交流&#xff0c;是不是感觉很神奇&…

校对软件趋势:人工智能技术的应用和未来发展

校对软件正处于人工智能技术应用和未来发展的前沿。以下是校对软件的一些趋势&#xff1a; 1.自然语言处理&#xff1a;随着自然语言处理(NLP)技术的不断发展&#xff0c;校对软件能够更准确地理解和分析文本。通过深度学习和语言模型的应用&#xff0c;校对软件可以更好地捕捉…

法律监督大数据平台有什么作用?

大数据赋能时代法律监督&#xff0c;构建法律行业领域大数据监督模型。法律监督大数据研判系统助力检察机关以社会公正为核心价值追求&#xff0c;对执法不严、司法不公“零容忍”&#xff0c;强化对诉讼活动的法律监督&#xff0c;坚决维护法律尊严&#xff0c;坚决捍卫公平正…

爬虫013_函数的定义_调用_参数_返回值_局部变量_全局变量---python工作笔记032

然后再来看函数,可以避免重复代码 可以看到定义函数以及调用函数

第六章代码题(四)

8.在以孩子兄弟二叉链表存储的树中&#xff0c;求树的叶子结点数。 首先要了解孩子兄弟存储结构&#xff0c;简单来说就是每个结点的左孩子不变&#xff0c;在同一层的结点都依次连在该层的结点的右孩子上。 如图 &#xff1a; 将上述的左孩子域改为第一个孩子指针&#xff0c…

安卓开发问题记录:需要常量表达式

问题原因 写代码过程中爆出这个错误&#xff1a;需要常量表达式&#xff0c;定位到switch。 解决方法&#xff1a;把switch case&#xff0c;改成if else 错误源代码&#xff1a; public void onClick(View view) {switch (view.getId()) {case R.id.iv_code:RxCaptcha.build(…

三、web核心防御机制(下)

文章目录 核心防御机制2.3处理攻击者2.3.1 处理错误2.3.2 维护审计日志2.3.3 向管理员发出警报2.3.4 应对攻击 2.4 管理应用程序 核心防御机制 2.3处理攻击者 任何设计安全应用程序的开发人员必须基于这样一个假设&#xff1a;应用程序将成为蓄意破坏且经验丰富的攻击者的直接…

RISC-V公测平台发布 · UnixBench完整测试

简介 UnixBench是一个开源的GPLv2许可的工具&#xff0c;它提供了对类Unix系统性能的基本指标。 通过运行UnixBench&#xff0c;可以获得有关系统性能的基本指标&#xff0c;用于与其他系统进行比较&#xff0c;也可以作为改进系统性能的参考。但UnixBench并不是一个综合性能…

Python数据分析实战-格式化字符串的两种方法(附源码和实现效果)

实现功能 格式化字符串的两种方法 实现代码 # 方法一&#xff1a;format方法 query SELECT customer_id, COUNT(*) as num_ordersFROM ordersWHERE date > {start_date} AND date < {end_date} GROUP BY customer_idHAVING num_orders > {min_orders} start_da…

springboot:统一参数校验(JSR303校验)

业务需求&#xff1a;在controller中对必填参数和参数类型做合法性校验 1、在项目父工程添加spring-boot-starter-validation的依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-validation</artifa…

xml布局不显示的编写代码方法

新建项目在新项目用dp编写布局复制粘贴去掉所有dp在复制dimen/dp_

element-plus的日期选择器限定选择范围

目录 前言一、最近30天总结 前言 提示&#xff1a;这里可以添加本文要记录的大概内容&#xff1a; element-plus的日期选择器限定选择范围&#xff0c;由于数据的获取范围限定&#xff0c;需要前端处理一下日期的选择范围 提示&#xff1a;以下是本篇文章正文内容&#xff0c…

golang学习随记

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 go学习快捷键及快速生成代码片段go基础循环流程控制关键字切片&#xff0c;拷贝函数闭包 defer语句格式化输出go语言随机数rand.seed() 包管理并发编程goroutinecha…

LangChain源码逐行解密之LLMs(一)

LangChain源码逐行解密之LLMs(一) 18.1 LangChain应用程序演示 本节会以一个简单的应用程序为切入点,进入到LangChain的源码部分,带领大家贯通整个LangChain最核心的框架源码,我们的应用程序不会太复杂,只是分析LangChain源码的切入点或者入口点。 如图18-1所示,是应用程…

【洋码头关键词获取商品列表技术解析】

洋码头关键词获取商品列表功能简介 洋码头的关键词获取商品列表功能是为了满足用户的个性化需求&#xff0c;提供更精准、更有针对性的商品推荐。用户可以输入关键词搜索&#xff0c;系统会根据关键词从海量的商品库中筛选出相关的商品列表&#xff0c;从而使用户更容易找到所需…

【目标检测系列】YOLOV1解读

前言 从R-CNN到Fast-RCNN&#xff0c;之前的目标检测工作都是分成两阶段&#xff0c;先提供位置信息在进行目标分类&#xff0c;精度很高但无法满足实时检测的要求。 而YoLo将目标检测看作回归问题&#xff0c;输入为一张图片&#xff0c;输出为S*S*(5*BC)的三维向量。该向量…