A.构造(牛客挑战赛)
创始人
2025-05-30 02:49:07

A.构造

  • 一、问题
  • 二、分析
  • 三、代码

一、问题

在这里插入图片描述

二、分析

我们只需要以中间作为分割点,一侧放比nnn大的数,另一侧放小于等于nnn的数。这样就能保证前缀和与后缀和是不相等的。
到底是那一侧放大于nnn的,那一侧放小于等于nnn的,取决于题目中固定的bbb放在了那一侧。如果bbb小于等于nnn,那么这一侧就放小于等于nnn的,另一侧就放大于nnn的。

接下来我们证明一下这种做法的正确性:
在这里插入图片描述
上图就是我们刚刚构造的逻辑,我们从中间将这个数组分开,观察一下,中间线左侧的前缀和是否和中间线右侧的后缀和相等。

因为左侧的数字都大于n,右侧的数字都小于等于n,所以左侧的数字大于右侧的数字,所以左侧的数字构成的前缀和也一定大于右侧数字构成的后缀和。即不存在相等的情况。

接下来,我们再考虑当前缀和与后缀和越过中间线的情况。
这种情况有什么特别的呢?特别之处在于,当我们越过中间线以后,左侧的前缀和开始加上一些小于等于n的数,右侧的后缀和开始加上一些大于等于n的数字,那么在这种情况下是否可能相等呢?

左侧的前缀和等于数组总和减去左侧没有加上的数,右侧的后缀和等于数组总和减去右侧没有加上的数。
因为被减数相同,所以只有在二者没有加上的数字和相同时,前缀和与后缀和才有可能相等。

由于前后缀的元素个数是相等的,所以他们没有加上的数字的个数是相等的。前缀和没有加上的数都是小于等于n的,后缀和没有加上的数都是大于n的。所以后缀和没加上的数一定是大于前缀和没加上的数,因此二者不可能相等。

三、代码

#include
#define endl '\n'
#define INF 0x3f3f3f3f
using namespace std;
typedef long long ll;
typedef pair pii;
const int N = 1e5 + 10;void solve()
{int n, a, b;cin >> n >> a >> b;vectornums(2 * n);nums[a - 1] = b;if(b > n){if(a > n){int cnt = n + 1;for(int i = n; i < 2 * n; i ++ ){if(i == a - 1)continue;if(cnt != b){nums[i] = cnt ++; }else{cnt ++;nums[i] = cnt ++;}}for(int i = 0; i < n; i ++){nums[i] = i + 1;}}else{int cnt = n + 1;for(int i = 0; i < n; i ++ ){if(i == a - 1)continue;if(cnt != b){nums[i] = cnt ++; }else{cnt ++;nums[i] = cnt ++;}}cnt = 0;for(int i = n; i < 2 * n; i ++){nums[i] = ++ cnt;}}}else{if(a > n){int cnt = 1;for(int i = n; i < 2 * n; i ++ ){if(i == a - 1)continue;if(cnt != b){nums[i] = cnt ++; }else{cnt ++;nums[i] = cnt ++;}}for(int i = 0; i < n; i ++){nums[i] = n + i + 1;}}else{int cnt = 1;for(int i = 0; i < n; i ++ ){if(i == a - 1)continue;if(cnt != b){nums[i] = cnt ++; }else{cnt ++;nums[i] = cnt ++;}}for(int i = n; i < 2 * n; i ++){nums[i] = i + 1;}}}for(auto x : nums){cout << x << " ";}cout << endl;
}int main()
{ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);int t;cin >> t;while(t--)solve();
}

相关内容

热门资讯

C语言/文件 博客制作不易,欢迎各位点赞👍+收藏⭐+关注一、文件缓冲...
从《超级马里奥酷跑》看马里奥的... 今天给各位分享从《超级马里奥酷跑》看马里奥的发展史的知识,其中也会对超级马里奥演变史进行解释,如果能...
包含fbiwarning是什么... 本篇文章极速百科给大家谈谈fbiwarning是什么梗,以及对应的知识点,希望对各位有所帮助,不要忘...
奥迪a3保养周期,奥迪a3保养... 今天给各位分享奥迪a3保养周期,奥迪a3保养费用明细表的知识,其中也会对奥迪a3保养周期及费用进行解...
洋县这140名车主请注意,交警... 本篇文章极速百科给大家谈谈洋县这140名车主请注意,交警喊你来一趟!,以及洋县车祸最新对应的知识点,...
Faster RCNN 对血液... 目录 1. 介绍 2. 工具函数介绍 utils 2.1 xml 文件的读取 get_label_f...
Progress ThemeB... Progress ThemeBuilder updated Crack   增加了对jQuery的K...
特大交通事故的标准是什么的简单... 本篇文章极速百科给大家谈谈特大交通事故的标准是什么,以及对应的知识点,希望对各位有所帮助,不要忘了收...
江淮全新SUV实车亮相,有望定... 本篇文章极速百科给大家谈谈江淮全新SUV实车亮相,有望定价在10万左右,以及江淮最新款suv对应的知...
10万以内家用车哪款好五款热门... 本篇文章极速百科给大家谈谈10万以内家用车哪款好五款热门10万以内家用车介绍,以及十万以内家用车什么...
运动鞋可以水洗吗(耐克运动鞋可... 本篇文章极速百科给大家谈谈运动鞋可以水洗吗,以及耐克运动鞋可以水洗吗对应的知识点,希望对各位有所帮助...
Spring学习(五) 事物管理: 一、事物管理的回顾: 1、事物的概念: 事物&...
python练习题5.0 1、给定一个包含n+1个整数的数组nums,其数字在1到n之间(...
django-celery-b... 一、创建django项目和app 1、安装定时任务第三方包 pip install django-c...
立刻有是什么意思(唐人街探案2... 今天给各位分享立刻有是什么意思的知识,其中也会对唐人街探案2立刻有是什么意思进行解释,如果能碰巧解决...
上海车zheng震最佳地点(上... 今天给各位分享上海车zheng震最佳地点的知识,其中也会对上海车辆振动检测电话进行解释,如果能碰巧解...
秦国历代国君及姓名皇帝列表(秦... 今天给各位分享秦国历代国君及姓名皇帝列表的知识,其中也会对秦国历代国君及姓名介绍进行解释,如果能碰巧...
摩托车高温后自动熄火baiku... 本篇文章极速百科给大家谈谈摩托车高温后自动熄火baiku白酷,以及摩托发动机高温自动熄火对应的知识点...
REDIS18_ ①. ZipList是一种特殊的"双端链表" ,由一系列特殊编码的连续内存块组成。可以在任意一端进行...
外贸优化排名稳定吗?外贸网站如... 外贸优化排名稳定吗? 答案是:稳定。 当然这是针对持续做谷歌SEO排名优...
浅谈C库函数——memcpy、...   💌内容专栏:【C语言】进阶部分 💌本文概括&#...
oracle 删除表空间(ta... – 创建表空间; Create tablespace xihu datafile ‘d:\oracl...
北京租电脑(北京租电脑多少钱一... 本篇文章极速百科给大家谈谈北京租电脑,以及北京租电脑多少钱一个月对应的知识点,希望对各位有所帮助,不...
手机摄像头mp是什么意思(摄像... 今天给各位分享手机摄像头mp是什么意思的知识,其中也会对摄像头mp啥意思进行解释,如果能碰巧解决你现...
4缸玉柴柴油机型号一览表-百度... 今天给各位分享4缸玉柴柴油机型号一览表-百度有驾的知识,其中也会对玉柴四缸机有多少种进行解释,如果能...
道指开盘时间(道指几点停盘) ... 今天给各位分享道指开盘时间的知识,其中也会对道指几点停盘进行解释,如果能碰巧解决你现在面临的问题,别...
SpringMVC的Dispa... 本文概述: 从简述 Tomcat 如何处理请求, 然后去探究 SpringMVC 如何去接收请求并通...
ups蓄电池品牌排行有人知道吗... 今天给各位分享ups蓄电池品牌排行有人知道吗的知识,其中也会对ups蓄电池品牌哪个好进行解释,如果能...
脚脖子是什么部位(脚脖子是什么... 本篇文章极速百科给大家谈谈脚脖子是什么部位,以及脚脖子是什么部位图解对应的知识点,希望对各位有所帮助...
各种花开放的时间是几点(各种花... 本篇文章极速百科给大家谈谈各种花开放的时间是几点,以及各种花开放的时间是几点,以及拟人手法描写开花对...