正题

题目链接:https://www.luogu.com.cn/problem/CF891B


题目大意

给出nnn个数字互不相同的一个序列aaa,求它的一个排列bbb,使得选出任意一个1∼n1\sim n1∼n的下标真子集,都有aaa的对应下标和不等于bbb的对应下标和。

1≤n≤22,0≤ai≤1091\leq n\leq 22,0\leq a_i\leq 10^91≤n≤22,0≤ai​≤109


解题思路

首先考虑对于每个aia_iai​向它对应bib_ibi​连边,然后如果连出来的不是一个大小为nnn的环的话显然是错的,因为一次选择相当于选择环上的一条边,那么选一个环显然是对的。

然后现在问题就变成了找一个环排列满足以上的条件,再考虑怎么找这个环排列,发现对应环上选择的连续一段那么最后肯定是头+++而且尾−-−,然后中间的不计贡献,换句话就是无法在这个环上选出一个子序列,然后+/−+/-+/−交错使得和为000。

对于这个问题的构造就很简单了,直接选择一个递增的序列,这样每个+++肯定有个比他更大/小的−-−与它抵消。

不过这样看上去其实是想复杂了,换种想法其实就是对于每个选出的除了最大的aia_iai​都有一个更大的bib_ibi​对应,然后如果选择了最大的aia_iai​那么这个差值需要选择另外n−1n-1n−1个才能抵上。

时间复杂度:O(nlog⁡n)O(n\log n)O(nlogn)


code

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=30;
int n,a[N],b[N];
int main()
{scanf("%d",&n);for(int i=1;i<=n;i++)scanf("%d",&a[i]),b[i]=a[i];sort(b+1,b+1+n);for(int i=1;i<=n;i++){if(a[i]==b[n])printf("%d ",b[1]);else printf("%d ",b[upper_bound(b+1,b+1+n,a[i])-b]);}return 0;
}

CF891B-Gluttony【构造】相关推荐

  1. Codeforces Round #446 (Div. 1) B. Gluttony 构造 + 补集思想

    传送门 文章目录 题意: 思路: 题意: 给你一个数组aaa,保证aaa中每个数都互不相同,让你构造一个数组bbb,满足对于任意的S=x1,x2,...,xk,1≤xi≤n,0≤k<nS={x_ ...

  2. LeetCode简单题之构造矩形

    题目 作为一位web开发者, 懂得怎样去规划一个页面的尺寸是很重要的. 所以,现给定一个具体的矩形页面面积,你的任务是设计一个长度为 L 和宽度为 W 且满足以下要求的矩形的页面.要求: 你设计的矩形 ...

  3. 兑换量子计算机,阅读 | 【量子计算机】构造置换量子门

    原标题:阅读 | [量子计算机]构造置换量子门 量子计算机的一个基本组成单位叫量子门(quantum gate),下面简单介绍些基本概念. 量子比特和量子态 量子计算机的信息存储单元是一种叫做量子比特 ...

  4. [ActionScript 3.0] AS向php发送二进制数据方法之——在URLRequest中构造HTTP协议发送数据...

    主类 HTTPSendPHP.as 1 package 2 { 3 import com.JPEGEncoder.JPGEncoder; 4 import com.fylib.httpRequest. ...

  5. js把base64串解析成中文_回文问题终极篇:最小代价构造回文串

    学算法认准 labuladong 东哥带你手把手撕力扣? 点击下方卡片即可搜索? 读完本文,你可以去力扣完成第 1312 题「让字符串成为回文串的最少插入次数」,难度 Hard. 回文串就是正着读反着 ...

  6. php构造和析构方法,php5构造函数与析构函数实例

    自php5起,有了构造函数与析构函数. 这使得php更富有面向对象的魅力了. 在php4时,构造函数用的是与类同名的函数来进行构造这个动作. 例如: 复制代码 代码示例: /* * myclass.p ...

  7. 消除左递归实验代码_「leetcode」108. 构造二叉搜索树【递归】【迭代】详解!

    构造二叉搜索树,一不小心就平衡了 ❞ 108.将有序数组转换为二叉搜索树 将一个按照升序排列的有序数组,转换为一棵高度平衡二叉搜索树. 本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树 ...

  8. 对象特性--构造函数调用规则

    默认情况下,C++编译器至少给一个类添加3个函数: 1.默认构造函数(无参,函数体为空) 2.默认析构函数(无参,函数体为空) 3.默认拷贝构造函数,对属性进行值拷贝 1.创建一个类,C++编译器会给 ...

  9. C++派生类与基类构造函数调用次序

    本文用来测试C++基类和派生类构造函数,析构函数,和拷贝构造函数的调用次序. 运行环境:SUSE Linux Enterprise Server 11 SP2  (x86_64) #include & ...

最新文章

  1. RabbitMQ headers Exchange
  2. mongodb指南(翻译)(一) - 翻译前言
  3. 三、界面介绍(IVX快速手册)
  4. win7计算机开机启动项设置,开机启动项,教您Win7开机启动项怎么设置
  5. AS179-92LF pHEMT GaAs FET单刀双掷(SPDT)开关SKYWORKS
  6. Boostnote:适合程序员的笔记软件
  7. 自动钉木箱机器人_一种木箱生产用自动钉装设备的制作方法
  8. 【转载】ubuntu下linux内核源码阅读工具和调试方法总结
  9. Asus Prime B360M-A+i5-8400+RX 570 黑苹果efi引导文件
  10. 硬盘扇区数据结构分析
  11. matlab 中图的大小_关于matlab绘图中字体及图片大小等的设置
  12. Keystone 认证服务
  13. word毕业论文题注自动编号设置——第一章与图1-1
  14. RDP报表工具v2.3.*版本升级操作步骤
  15. java 键盘输入多种方法
  16. 136 模型的操作3
  17. Scrapy研究探索(六)——自动爬取网页之II(CrawlSpider)
  18. win10 提供管理员权限才能删除文件夹
  19. Java扑克牌小游戏
  20. 好用的读书笔记app

热门文章

  1. seata xid是什么_使用Seata彻底解决Spring Cloud中的分布式事务问题!
  2. inputstream是否一定要close_汽车加装行李架后,总被交警拦下,类似改装,是否一定要备案...
  3. 5码默认版块_5个小众的生活学习类的宝藏App
  4. 抽屉远离在计算机的应用,抽屉原理的应用及其推广优秀毕业论文
  5. java bouncycastle_java – 使用bouncycastle进行签名和验证签名的正确方法
  6. c语言四个数找大wxyz,2015年计算机二级《C语言》考试上机测试题(7)
  7. 中connect怎么用_烘焙中的各种酒,到底该怎么用?
  8. gif分解工具_Python之GIF图倒放,沙雕快乐源泉
  9. php云点播源码,乐视云直播 点播服务端api
  10. c语言——什么时候使用getchar()读取换行符