Codeforces.297C.Splitting the Uniqueness(构造)
\(Description\)
给定一个长为n的序列A,求两个长为n的序列B,C,对任意的i满足B[i]+C[i]=A[i],且B,C序列分别至少有\(\lfloor\frac{2*n}{3}\rfloor\)个元素不同。
A中元素各不相同,Ai,Bi,Ci均为非负整数。
\(Solution\)
取\(k=\lfloor\frac{n}{3}\rfloor\),将B,C序列分成三份。可以先将A进行排序。
B序列1k取0k-1,C序列k+12k取k2k-1,C 2k+1n取0k-1;B,C其余部分分别为Ai减去另一确定数组
这样可以满足C序列条件,对于2k+1n,Ai递增,Ci应是递减的,这样才能满足Bi是单调的(递增),这样B不会在2k+1n中出现重复。
最小值B[2k+1]=A[2k+1]-C[2k+1]>=k+1,即大于任意Bi(i∈[1,k])。
若Ai是各不相同的,那么一定有解;否则要讨论下。
(博客园不会表格。。)
注意k不能单纯地取n/3,在有余数比如5的时候,序列1.2部分元素比3部分少,可能在3部分会有重复,在n比较大的时候这重复的两个元素就很致命了。
/*
1~k k+1~2k 2k+1~n
Bi 0,1,2,...,k-1 Ai-Ci Ai-Ci
Ci Ai-Bi k,k+1,...,2k-1 k-1,...,2,1,0
*/
#include <cstdio>
#include <cctype>
#include <algorithm>
#define gc() getchar()
#define mp std::make_pair
const int N=1e5+5;
int n;
std::pair<int,int> A[N];
struct Answer
{
int id,b,c;
bool operator <(const Answer &x)const {return id<x.id;}
}ans[N];
inline int read()
{
int now=0,f=1;register char c=gc();
for(;!isdigit(c);c=gc()) if(c=='-') f=-1;
for(;isdigit(c);now=now*10+c-'0',c=gc());
return now*f;
}
int main()
{
n=read();
for(int i=1; i<=n; ++i) A[i]=mp(read(),i);
std::sort(A+1,A+1+n);
int k=(n+2)/3;
for(int i=1; i<=k; ++i) ans[i].b=i-1, ans[i].c=A[i].first-i+1, ans[i].id=A[i].second;
for(int i=k+1; i<=k<<1; ++i) ans[i].c=i-1, ans[i].b=A[i].first-i+1, ans[i].id=A[i].second;
for(int i=k<<1|1; i<=n; ++i) ans[i].c=n-i, ans[i].b=A[i].first-n+i, ans[i].id=A[i].second;
std::sort(ans+1,ans+1+n);
puts("YES");
for(int i=1; i<n; ++i) printf("%d ",ans[i].b);
printf("%d\n",ans[n].b);
for(int i=1; i<n; ++i) printf("%d ",ans[i].c);
printf("%d",ans[n].c);
return 0;
}
Codeforces.297C.Splitting the Uniqueness(构造)的更多相关文章
- Codeforces 297C. Splitting the Uniqueness
C. Splitting the Uniqueness time limit per test:1 second memory limit per test:256 megabytes input:s ...
- CodeForces 297C Splitting the Uniqueness (脑补构造题)
题意 Split a unique array into two almost unique arrays. unique arrays指数组各个数均不相同,almost unique arrays指 ...
- 【CodeForces 297C】Splitting the Uniqueness
题意 序列s有n个数,每个数都是不同的,把它每个数分成两个数,组成两个序列a和b,使ab序列各自去掉个数后各自的其它数字都不同. 如果存在一个划分,就输出YES,并且输出两个序列,否则输出NO. 分析 ...
- Educational Codeforces Round 10 B. z-sort 构造
B. z-sort 题目连接: http://www.codeforces.com/contest/652/problem/B Description A student of z-school fo ...
- Codeforces 707C Pythagorean Triples(构造三条边都为整数的直角三角形)
题目链接:http://codeforces.com/contest/707/problem/C 题目大意:给你一条边,问你能否构造一个包含这条边的直角三角形且该直角三角形三条边都为整数,能则输出另外 ...
- Codeforces 1246D/1225F Tree Factory (构造)
题目链接 https://codeforces.com/contest/1246/problem/D 题解 首先考虑答案的下界是\(n-1-dep\) (\(dep\)为树的深度,即任何点到根的最大边 ...
- Codeforces - 1202D - Print a 1337-string... - 构造
https://codeforces.com/contest/1202/problem/D 当时想的构造是中间两个3,然后前后的1和7组合出n,问题就是n假如是有一个比较大的质数因子或者它本身就是质数 ...
- Codeforces 743C - Vladik and fractions (构造)
Codeforces Round #384 (Div. 2) 题目链接:Vladik and fractions Vladik and Chloe decided to determine who o ...
- Codeforces 1368E - Ski Accidents(构造+思维)
Codeforces 题面传送门 & 洛谷题面传送门 神仙构造题(不过可能我构造太烂了?) 首先考虑这个奇奇怪怪的 \(\dfrac{4}{7}\),以及这个每个点出度最多为 \(2\) 的条 ...
随机推荐
- Protobuf使用手册
Protobuf使用手册 第1章 定义.proto 文件 首先我们需要编写一个 proto 文件,定义我们程序中需要处理的结构化数据,在 protobuf 的术语中,结构化数据被称为 Message. ...
- mysql系列六、mysql创建用户、授权、备份及恢复命令
一.创建用户和授权 下面的操作中,其中someusername为用户名,somepassword为密码,somedbname为数据库名 1.创建用户 create user 'someusername ...
- 在12C上创建wm_concat函数
11gr2和12C上已经摒弃了wm_concat函数,当时我们很多程序员在程序中确使用了该函数,导致程序出现错误,为了减轻程序员修改程序的工作量,只有通过手工创建个wm_concat函数,来临时解决该 ...
- 【Android开源库】美团等APP城市选择
CityPicker 现在使用比较多的类似美团等APP的城市选择界面. 2步即可实现,就是这么简单粗暴! Gif image APK 下载demo.apk体验. Install Gradle: com ...
- vue系列之webstrom的设置
1.安装vue插件,方法 Setting->Plugins,点击Plugins,在右边输入vue,找到相应插件,然后安装 2.创建vue模板 注意红圈里面的 3.设置vue文件支持的样式 注意: ...
- Twitter开源的Heron快速安装部署教程
什么是Heron? Twitter使用Storm实时分析海量数据已经有好几年了,并在2011年将其开源.该项目稍后开始在Apache基金会孵化,并在2015年秋天成为顶级项目.Storm以季度为发布周 ...
- 使用siege执行压力测试
没有安装siege? 可参考我的另一篇博客 使用siege执行压力测试笔记 场景分析 使用siege对https://www.baidu.com/进行加压. 要求 模拟20个用户同时访问 一共跑3个循 ...
- python 全栈开发,Day67(Django简介)
昨日内容回顾 1. socket创建服务器 2. http协议: 请求协议 请求首行 请求方式 url?a=1&b=2 协议 请求头 key:value 请求体 a=1&b=2(只有p ...
- 详解如何进行第三方App接入微信登录
微信登录接入 微信登录遵循协议Aouth2.0中的授权码模式 我们来看一下Aouth2.0中的授权码模式是怎么定义的: 授权码模式(authorization code)是功能最完整.流程最严密的授权 ...
- hdu 1005 根据递推公式构造矩阵 ( 矩阵快速幂)
f(1) = 1, f(2) = 1, f(n) = (A * f(n - 1) + B * f(n - 2)) mod 7. Sample Input1 1 3 //a b n1 2 100 0 0 ...