题目链接

\(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(构造)的更多相关文章

  1. Codeforces 297C. Splitting the Uniqueness

    C. Splitting the Uniqueness time limit per test:1 second memory limit per test:256 megabytes input:s ...

  2. CodeForces 297C Splitting the Uniqueness (脑补构造题)

    题意 Split a unique array into two almost unique arrays. unique arrays指数组各个数均不相同,almost unique arrays指 ...

  3. 【CodeForces 297C】Splitting the Uniqueness

    题意 序列s有n个数,每个数都是不同的,把它每个数分成两个数,组成两个序列a和b,使ab序列各自去掉个数后各自的其它数字都不同. 如果存在一个划分,就输出YES,并且输出两个序列,否则输出NO. 分析 ...

  4. 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 ...

  5. Codeforces 707C Pythagorean Triples(构造三条边都为整数的直角三角形)

    题目链接:http://codeforces.com/contest/707/problem/C 题目大意:给你一条边,问你能否构造一个包含这条边的直角三角形且该直角三角形三条边都为整数,能则输出另外 ...

  6. Codeforces 1246D/1225F Tree Factory (构造)

    题目链接 https://codeforces.com/contest/1246/problem/D 题解 首先考虑答案的下界是\(n-1-dep\) (\(dep\)为树的深度,即任何点到根的最大边 ...

  7. Codeforces - 1202D - Print a 1337-string... - 构造

    https://codeforces.com/contest/1202/problem/D 当时想的构造是中间两个3,然后前后的1和7组合出n,问题就是n假如是有一个比较大的质数因子或者它本身就是质数 ...

  8. Codeforces 743C - Vladik and fractions (构造)

    Codeforces Round #384 (Div. 2) 题目链接:Vladik and fractions Vladik and Chloe decided to determine who o ...

  9. Codeforces 1368E - Ski Accidents(构造+思维)

    Codeforces 题面传送门 & 洛谷题面传送门 神仙构造题(不过可能我构造太烂了?) 首先考虑这个奇奇怪怪的 \(\dfrac{4}{7}\),以及这个每个点出度最多为 \(2\) 的条 ...

随机推荐

  1. js 鼠标拖拽元素

    基础知识 event.clientX.event.clientY 鼠标相对于浏览器窗口可视区域的X,Y坐标(窗口坐标),可视区域不包括工具栏和滚动条.IE事件和标准事件都定义了这2个属性 event. ...

  2. Potential Pythonic Pitfalls

    Potential Pythonic Pitfalls Monday, 11 May 2015 Table of Contents Not Knowing the Python Version Obs ...

  3. 理解 Linux 配置文件【转】

    转自:http://www.ibm.com/developerworks/cn/linux/management/configuration/ 分类和使用 本文说明了 Linux 系统的配置文件,在多 ...

  4. openssl版本升级操作记录【转】

    需要部署nginx的https环境,之前是yum安装的openssl,版本比较低,如下:   [root@nginx ~]# yum install -y pcre pcre-devel openss ...

  5. DES加密模式详解

    DES加密模式详解 http://www.cnblogs.com/Lawson/archive/2012/05/20/2510781.html http://www.blogjava.net/wayn ...

  6. redhat换用centos源

    解除原有源rpm -aq|grep yum|xargs rpm -e --nodepsrpm -aq|grep python-iniparse|xargs rpm -e --nodeps rpm -q ...

  7. C/C++:函数调用规则__stdcall,__cdecl,__pascal,__fastcall

    __cdecl __cdecl 是 C Declaration  的缩写,表示 C 语言默认的函数调用方法:所有参数从右到左依次入栈,这些参数由调用者清除,称为手动清栈.被调用函数不会要求调用者传递多 ...

  8. openwrt 分区

    下面以ar9344 16M flash为例子: uboot启动时传递给内核的参数为: bootargs=console=ttyS0,115200 root=31:02 rootfstype=jffs2 ...

  9. ajax相关知识点

    AJAX的概念,即“Asynchronous Javascript And XML” 通过在后台(浏览器的后台)与服务器进行少量数据交换,AJAX 可以使网页实现异步更新.这意味着可以在不重新加载整个 ...

  10. Coursera台大机器学习技法课程笔记05-Kernel Logistic Regression

    这一节主要讲的是如何将Kernel trick 用到 logistic regression上. 从另一个角度来看soft-margin SVM,将其与 logistic regression进行对比 ...