【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 ...
随机推荐
- 重温 Webpack, Babel 和 React
开始之前 在书写文章之前,我假设大家已经有了 JavaScript,Node 包管理工具,Linux 终端操作 这些基本技能,接下来,我将一步一步指引大家从头搭建一个 React 项目 最终实现的效果 ...
- 2018-12-25-Roslyn-如何使用-MSBuild-Copy-复制文件
title author date CreateTime categories Roslyn 如何使用 MSBuild Copy 复制文件 lindexi 2018-12-25 9:35:8 +080 ...
- MySQL——外键
概念 关键字:foreign key,也叫做外键约束! 如果一个实体A的某个字段,刚好指向另一个实体B的主键,那么实体A的这个字段就叫做外键: 所以,简单来说,外键就是本表的某个字段指向外表的主键! ...
- 【转载】【python】python练手项目
入门篇 1.Python - Python 图片转字符画 50 行 Python 代码完成图片转字符画小工具. <img src="https://pic3.zhimg.com ...
- day5 from 金角大王
Python 之路 Day5 - 常用模块学习 本节大纲: 模块介绍 time &datetime模块 random os sys shutil json & picle shel ...
- typroa 和markdown基操
目录 标题 一级标题 二级标题 字体 图片 来插入图片,如在同意文件夹上,可直接加图片名 数学公式 编辑表格 标题 一级标题 二级标题 三级标题 无序标题 *加空格,无序标题 也可以使用ctrl = ...
- 盘点Apache毕业的11个顶级项目
自1999年成立至今,Apache 软件基金会已成功建立起自己强大的生态圈.其社区涌现了非常多优秀的开源项目,同时有越来越多国内外项目走向这个国际开源社区进行孵化.据悉,目前所有的 Apache 项目 ...
- day39-Spring 11-Spring的AOP:基于AspectJ的XML配置方式
package cn.itcast.spring3.demo2; import org.aspectj.lang.ProceedingJoinPoint; /** * 切面类 * @author zh ...
- MacOS配置双网
目的 日常工作中,我们可能会同时需要用到公司的内网以及互联网,为了避免来回的切换,我们可以通过配置电脑的两个网卡来实现同时访问内网和互联网. 环境说明 互联网 无线网卡 网关 子网掩码 内网 有线网卡 ...
- JavaScript中常用的几种类型检测方法
javascript中类型检测方法有很多: typeof instanceof Object.prototype.toString constructor duck type 1.typeof 最常见 ...