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 ...
随机推荐
- PMP模拟考试-2
1. Increasing resources on the critical path activities may not always shorten the length of the pro ...
- 让树莓派自动上报IP地址到邮箱,二代B
由于我使用树莓派的场景大多数是在没有显示器.只用terminal连接它的情况下,所以,它的IP地址有时会在重启之后变掉(DHCP的),导致我无法通过terminal连接上它.然后我又要很麻烦地登录路由 ...
- PHP从数组中找到指定元素的位置
群里有人问,有个数组五个元素 分为1到5 现在要求 循环找出3元素的索引,怎么做性能才是最高. 我不知道哪个性能最高,但是我想提出可以用多种方式进行查找,然后进行比较选择. 我想,最简单最基础的 应 ...
- express安装及使用(windows系统)
npm install express //安装express命令 npm install express-generator -g //Express 应用生成器,通过应用生成器工具 express ...
- linux 查看硬件信息
1.查看内存槽数.那个槽位插了内存,大小是多少 dmidecode|grep -P -A5 "Memory\s+Device"|grep Size|grep -v Range ...
- 第1章 Ansible 简介
1. Ansible 优点 (1) 易读的语法:Ansible使用playbook作为配置管理脚本,playbook是基于YAML开发的,是一种易于读写的数据格式(2) 远程主机无须安装任何依赖:被A ...
- 关于MFLAGS与MAKEFLAGS
与子make通讯的选项 诸如‘-s’和‘-k’标志通过变量MAKEFLAGS自动传递给子make.该变量由make自动建立,并包含make收到的标志字母.所以,如果您是用‘make –ks’变量MAK ...
- UVA 10120 - Gift?!(搜索+规律)
Problem D. Gift?! The Problem There is a beautiful river in a small village. N rocks are arranged ...
- 深入理解 Neutron -- OpenStack 网络实现(4):网络名字空间
问题导读1.如何查看网络名字空间?2.网络名字空间开头的名字有什么规律?3.dhcp服务是如何实现的?4.router的实现是通过iptables进行的是否正确?5.SNAT和DNAT规则有什么作用? ...
- css案例 - 评分效果的星星✨外衣
纳尼?什么星星外衣?好,直接上图比较能说清楚: 仔细看会发现规律:可以根据百分比/分值动态改变高亮星星的个数. 分步骤图: 这种效果,如果遇到一分一个星,没有半星(或者有也可以,直接加一个半星的类名) ...