【codeforces 761D】Dasha and Very Difficult Problem
time limit per test2 seconds
memory limit per test256 megabytes
inputstandard input
outputstandard 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.
Input
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.
Output
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.
Examples
input
5 1 5
1 1 1 1 1
3 1 5 4 2
output
3 1 5 4 2
input
4 2 9
3 4 8 9
3 2 1 4
output
2 2 2 9
input
6 1 5
1 1 1 1 1 1
2 3 5 4 1 6
output
-1
Note
Sequence b which was found in the second sample is suitable, because calculated sequence c = [2 - 3, 2 - 4, 2 - 8, 9 - 9] = [ - 1, - 2, - 6, 0] (note that ci = bi - ai) has compressed sequence equals to p = [3, 2, 1, 4].
【题目链接】:http://codeforces.com/contest/761/problem/D
【题解】
因为
c[i] = b[i]-a[i];
题目所给的p[i]实际上是c[i]之间的大小关系;
p[i]=1是最小的,p[i]=2则是第二小…p[i]=n则是最大的;
这样我们可以让
c的值从小到大为
c[1],c[1]+1,c[1]+2,c[1]+3…c[1]+n-1;
即每个值递增1
这样能够在满足p[]数组的情况下尽可能地让c[i]小,相应的b[i]也就小了
但是有可能我们要求c[i]为递增的规律的时候;
b[i]是根据c[i]求出来的
某个i会出现
b[i]< l
这个时候让b[i]为l(b数组没有说一定要全都不同)
然后c[i]相应地调整;
c[i]会变大一点,这样能保证满足p数组,同时b[i]还是最小的l,所以还是能够保证c[i]此时也是最小的
(但是如果b[i]>r,则直接输出无解;
因为此前的操作我们已经尽可能的让c数组小了;
如果还不行(即b[i]还是太大),那么就无解了;)
然后再从i+1开始
让
c[i+1]=c[i]+1
c[i+2] = c[i]+2
…
即此后每个值还是递增1
然后求出相应的b数组
(所以这个c数组最后可能中间会有不是c[i]=c[i-1]+1的断层);
一开始的时候设最小的c的下标为idx
让b[idx]=l;(这样能保证b数组、c数组一开始是最小的了)
求出这个时候的c[idx]作为发生器;
然后做上面的过程就好;
贪心点就是时刻保证c、b数组是最小的,这样b数组在某个时刻通过c数组获得的时候,如果大于r则肯定无解;
小于l则可以调整为l,还是保证c、b为最小的;
【完整代码】
#include <bits/stdc++.h>
using namespace std;
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
#define LL long long
#define rep1(i,a,b) for (int i = a;i <= b;i++)
#define rep2(i,a,b) for (int i = a;i >= b;i--)
#define mp make_pair
#define pb push_back
#define fi first
#define se second
#define rei(x) scanf("%d",&x)
#define rel(x) scanf("%I64d",&x)
typedef pair<int,int> pii;
typedef pair<LL,LL> pll;
const int dx[9] = {0,1,-1,0,0,-1,-1,1,1};
const int dy[9] = {0,0,0,-1,1,-1,1,-1,1};
const double pi = acos(-1.0);
const int MAXN = 1e5+100;
int a[MAXN],n,l,r,cc[MAXN],b[MAXN],c[MAXN];
void wujie()
{
puts("-1");
exit(0);
}
int main()
{
//freopen("F:\\rush.txt","r",stdin);
cin >> n >> l >> r;
rep1(i,1,n)
rei(a[i]);
rep1(i,1,n)
{
int x;
rei(x);
cc[x] = i;
}
//c[i] = b[i]-a[i];
//c[idx]>c[1]
//b[idx]-a[idx]>b[1]-a[1];
//c[i]+a[i] = b[i];
b[cc[1]] = l;
c[cc[1]] = b[cc[1]]-a[cc[1]];
int temp = b[cc[1]]-a[cc[1]];
rep1(i,2,n)
{
int idx = cc[i];
//
c[idx] = temp+1;
b[idx] = c[idx]+a[idx];
temp++;
if (b[idx]<l)
{
b[idx] = l;
temp = b[idx]-a[idx];
}
if (b[idx]>r)
wujie();
}
for (int i = 1;i <= n;i++)
{
printf("%d",b[i]);
if (i==n)
puts("");
else
putchar(' ');
}
return 0;
}
【codeforces 761D】Dasha and Very Difficult Problem的更多相关文章
- 【codeforces 761A】Dasha and Stairs
time limit per test2 seconds memory limit per test256 megabytes inputstandard input outputstandard o ...
- 【codeforces 761B】Dasha and friends
time limit per test2 seconds memory limit per test256 megabytes inputstandard input outputstandard o ...
- 【codeforces 761C】Dasha and Password(动态规划做法)
time limit per test2 seconds memory limit per test256 megabytes inputstandard input outputstandard o ...
- 【codeforces 761C】Dasha and Password(贪心+枚举做法)
time limit per test2 seconds memory limit per test256 megabytes inputstandard input outputstandard o ...
- 【codeforces 761E】Dasha and Puzzle
[题目链接]:http://codeforces.com/contest/761/problem/E [题意] 给你一棵树,让你在平面上选定n个坐标; 使得这棵树的连接关系以二维坐标的形式展现出来; ...
- 【Codeforces 459D】Pashmak and Parmida's problem
[链接] 我是链接,点我呀:) [题意] 定义两个函数 f和g f(i)表示a[1..i]中等于a[i]的数字的个数 g(i)表示a[i..n]中等于a[i]的数字的个数 让你求出来(i,j) 这里i ...
- 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序列的 ...
- Codeforces 761D Dasha and Very Difficult Problem(贪心)
题目链接 Dasha and Very Difficult Problem 求出ci的取值范围,按ci排名从小到大贪心即可. 需要注意的是,当当前的ci不满足在这个取值范围内的时候,判为无解. #in ...
- 【codeforces 415D】Mashmokh and ACM(普通dp)
[codeforces 415D]Mashmokh and ACM 题意:美丽数列定义:对于数列中的每一个i都满足:arr[i+1]%arr[i]==0 输入n,k(1<=n,k<=200 ...
随机推荐
- html2canvas截取屏幕的方法
html2canvas截取屏幕的方法 需要放在服务上运行,否则会报错, 放在服务器里,完美运行 处理截屏模糊的方法 html2canvas 0.5.0-beta3解决截图模糊问题 需要引入html2 ...
- Leetcode925.Long Pressed Name长按键入
你的朋友正在使用键盘输入他的名字 name.偶尔,在键入字符 c 时,按键可能会被长按,而字符可能被输入 1 次或多次. 你将会检查键盘输入的字符 typed.如果它对应的可能是你的朋友的名字(其中一 ...
- MSSQL2008 数据压缩方法
数据压缩功能使得SOL Server 2008允许在表.索引和分区中执行数据压缩,这样不仅可以节省磁盘空间,而且允许更多数据置入RAM中,从而提升数据库查询的性能. 1.启用行压缩 如果我们要在指定的 ...
- php封装的smarty类实例是怎样
* @link http://www.smarty.net/* @copyright 2008 New Digital Group, Inc.* @author Monte Ohrt <mont ...
- 在Eclipse打开文件目录
1.在Eclipse中使用外部命令 2.配置外部命令 3.设置使用的命令和参数 4.设置使用notepad++打开文件
- Spark day03
补充算子 transformations mapPartitionWithIndex 类似于mapPartitions,除此之外还会携带分区的索引值. repartition 增加或减少分区.会产生s ...
- 洛谷 P3258 [JLOI2014]松鼠的新家 树链剖分+差分前缀和优化
目录 题面 题目链接 题目描述 输入输出格式 输入格式 输出格式 输入输出样例 输入样例: 输出样例: 说明 说明 思路 AC代码 优化 优化后AC代码 总结 题面 题目链接 P3258 [JLOI2 ...
- 【风马一族_php】常用的语句
设置脚本的编码 <?php header('Content-type:text/html;charset=utf-8'); ?> 按原格式的输入内容 echo <pre>; ...
- 解决VS+Qt不生成moc文件问题
使用VS的Qt插件进行Qt开发时,有时候会遇到不能生成moc文件的问题. 1.在工程中可以看到这个Generated files目录下是有一个看似moc文件的文件,双击打开的话: 如果能正常打开,文件 ...
- hdu1421 dp
用dp[i][j]表示放了i件物品,j对时的最小值. dp[i-2][j-1]表示取当前的 dp[i-1][j]表示不取当前的. #include<stdio.h> #include< ...