codeforces 761D - Dasha and Very Difficult Problem
2 seconds
256 megabytes
standard input
standard output
Dasha logged into the system and began to solve problems. One of them is as follows:
Given two sequences a and b of length n each you need to write a sequence c of length n, the i-th element of which is calculated as follows: ci = bi - ai.
About sequences a and b we know that their elements are in the range from l to r. More formally, elements satisfy the following conditions: l ≤ ai ≤ r and l ≤ bi ≤ r. About sequence c we know that all its elements are distinct.

Dasha wrote a solution to that problem quickly, but checking her work on the standard test was not so easy. Due to an error in the test system only the sequence a and the compressed sequence of the sequence c were known from that test.
Let's give the definition to a compressed sequence. A compressed sequence of sequence c of length n is a sequence p of length n, so that pi equals to the number of integers which are less than or equal to ci in the sequence c. For example, for the sequence c = [250, 200, 300, 100, 50] the compressed sequence will be p = [4, 3, 5, 2, 1]. Pay attention that in c all integers are distinct. Consequently, the compressed sequence contains all integers from 1 to n inclusively.
Help Dasha to find any sequence b for which the calculated compressed sequence of sequence c is correct.
The first line contains three integers n, l, r (1 ≤ n ≤ 105, 1 ≤ l ≤ r ≤ 109) — the length of the sequence and boundaries of the segment where the elements of sequences a and b are.
The next line contains n integers a1, a2, ..., an (l ≤ ai ≤ r) — the elements of the sequence a.
The next line contains n distinct integers p1, p2, ..., pn (1 ≤ pi ≤ n) — the compressed sequence of the sequence c.
If there is no the suitable sequence b, then in the only line print "-1".
Otherwise, in the only line print n integers — the elements of any suitable sequence b.
5 1 5
1 1 1 1 1
3 1 5 4 2
3 1 5 4 2
4 2 9
3 4 8 9
3 2 1 4
2 2 2 9
6 1 5
1 1 1 1 1 1
2 3 5 4 1 6
-1
给一个数列a,给一个数列p,已知数列p是数列c按个元素大小编号1~n后的所谓的压缩数列,求任意一个符合条件的数列b=a+c(条件:数列a、b都在某个范围内);
思路:
例如对于第二组样例,
3 4 8 9
根据 3 2 1 4的大小重排后得到
8 4 3 9 (a)
1 2 3 4 (p)
相对应的,不妨假设数列b对应的第一位为下界2,那么可知数列c的对应第一位为-6
8 4 3 9 (a)
1 2 3 4 (p)
-6 (c)
2 (b)
再看第二位,不妨假设b还是下界,则c为-2,-2 > -6,符合p给定的大小顺序,则可以有:
8 4 3 9 (a)
1 2 3 4 (p)
-6 -2 (c)
2 2 (b)
再到第三位,不妨设b还是下界,则c为-1,依然符合p的大小顺序
8 4 3 9 (a)
1 2 3 4 (p)
-6 -2 -1 (c)
2 2 2 (b)
再到第四位,设b为下界,则c为-7,这时候发现不符合顺序,那么就让c等于前一位+1
8 4 3 9 (a)
1 2 3 4 (p)
-6 -2 -1 0 (c)
2 2 2 9 (b)
这时候,得到的b为9,不大于上界,符合条件,因此我们得到了一个符合条件的b:
2 2 2 9 (b)
最后我们在将数列b排回3 2 1 4的顺序即可(这步很重要……在这个样例里重新排序之后没有变化,但其他样例就不一定了……)
3 2 1 4 (p)
2 2 2 9 (b)
感觉自己写的代码一点都不优雅……(羞耻……
#include<cstdio>
int main()
{
int n,l,r,a[+],temp_a[+],p[+],c[+];
scanf("%d %d %d",&n,&l,&r);
for(int i=;i<=n;i++) scanf("%d",&temp_a[i]);
for(int i=;i<=n;i++) scanf("%d",&p[i]);
for(int i=;i<=n;i++) a[ p[i] ]=temp_a[i]; //for(int i=1;i<=n;i++) printf("%d ",a[i]);printf("\n"); int now=l-a[]-;
for(int i=;i<=n;i++)
{
if(l-a[i] > now) c[i]=(now=l-a[i]);
else c[i]=(now+=);
if( c[i]+a[i] > r ){
printf("-1\n");
return ;
}
} for(int i=;i<=n;i++){
if(i!=) printf(" ");
printf("%d",c[p[i]]+a[p[i]]);
}
printf("\n");
return ;
}
codeforces 761D - Dasha and Very Difficult Problem的更多相关文章
- Codeforces 761D Dasha and Very Difficult Problem(贪心)
题目链接 Dasha and Very Difficult Problem 求出ci的取值范围,按ci排名从小到大贪心即可. 需要注意的是,当当前的ci不满足在这个取值范围内的时候,判为无解. #in ...
- Codeforces Round #394 (Div. 2) D. Dasha and Very Difficult Problem 贪心
D. Dasha and Very Difficult Problem 题目连接: http://codeforces.com/contest/761/problem/D Description Da ...
- Codeforces Round #394 (Div. 2) D. Dasha and Very Difficult Problem —— 贪心
题目链接:http://codeforces.com/contest/761/problem/D D. Dasha and Very Difficult Problem time limit per ...
- Codeforces Round #394 (Div. 2) D. Dasha and Very Difficult Problem
D. Dasha and Very Difficult Problem time limit per test:2 seconds memory limit per test:256 megabyte ...
- 【codeforces 761D】Dasha and Very Difficult Problem
time limit per test2 seconds memory limit per test256 megabytes inputstandard input outputstandard o ...
- codeforces 761 D. Dasha and Very Difficult Problem(二分+贪心)
题目链接:http://codeforces.com/contest/761/problem/D 题意:给出一个长度为n的a序列和p序列,求任意一个b序列使得c[i]=b[i]-a[i],使得c序列的 ...
- D. Dasha and Very Difficult Problem 二分
http://codeforces.com/contest/761/problem/D c[i] = b[i] - a[i],而且b[]和a[]都属于[L, R] 现在给出a[i]原数组和c[i]的相 ...
- Educational Codeforces Round 40 F. Runner's Problem
Educational Codeforces Round 40 F. Runner's Problem 题意: 给一个$ 3 * m \(的矩阵,问从\)(2,1)$ 出发 走到 \((2,m)\) ...
- BNU 4356 ——A Simple But Difficult Problem——————【快速幂、模运算】
A Simple But Difficult Problem Time Limit: 5000ms Memory Limit: 65536KB 64-bit integer IO format: %l ...
随机推荐
- struts2防止反复提交的办法
<? xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC " ...
- SpringMVC由浅入深day01_3非注解的处理器映射器和适配器
3 非注解的处理器映射器和适配器 3.1 非注解的处理器映射器 3.1.1 HandlerMapping处理器映射器 HandlerMapping 负责根据request请求找到对应的Handler ...
- Synchronizing Threads and GUI in Delphi application
Synchronizing Threads and GUI See More About delphi multithreading tthread class user interface de ...
- Jsoup(三)-- Jsoup使用选择器语法查找DOM元素
1.Jsoup可以使用类似于CSS或jQuery的语法来查找和操作元素. 2.实例如下: public static void main(String[] args) throws Exception ...
- MySQL 安装与配置
Linux 安装 MySQL Windows 安装 MySQL 如何连接 MySQL 如何修改 MySQL 密码 如何重置 MySQL 密码
- Kafka 0.11版本新功能介绍 —— 空消费组延时rebalance
在0.11之前的版本中,多个consumer实例加入到一个空消费组将导致多次的rebalance,这是由于每个consumer instance启动的时间不可控,很有可能超出coordinator确定 ...
- 用shell查找某目录下的最大文件
这是一个很有趣的问题,因为作为一个shell菜鸟,我第一时间是没有任何想法的.心里纳闷为什么这样的操作Linux居然没有直接的命令实现这样的查询. 很自然地,第一感觉就是用awk去实现,因为菜鸟我看a ...
- 冥想_ PHP抽奖程序概率算法
//概率算法,6个奖项 $prize_arr = array( '0' => array('id'=>1,'prize'=>'iphone6','v'=>1), '1' =&g ...
- lua中的字符串操作(模式匹配)
(一). 模式匹配函数在string库中功能最强大的函数是:string.find(字符串查找)string.gsub(全局字符串替换)string.gfind(全局字符串查找)string.gmat ...
- linux下命令学习
1 在linux中,./代表当前目录下 例如 创建一个文件夹123 mkdir ./123 ->当前目录下创建一个123文件夹 mkdir -p ./123/456 在当前目录下创建一 ...