• 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 megabytes
    input:standard input
    output: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 sequencec = [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 nlr (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 sequencec = [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].

    题意:

    给你序列p和序列a,让你找一个合法的序列b,输出。

    序列c是通过bi-ai来得到的。

    序列p是通过离散化序列c来得到的。(离散化c序列,就是将c序列中的数字从小到大编号)

    #include <iostream>
    #include<cstdio>
    #include<algorithm>
    using namespace std;
    struct node
    {
        int id,num;
    }a[100005];
    int b[100005],k[100005];
    int n,l,r;
    bool cmp(node a,node b)
    {
        return a.id>b.id;
    }
    int main()
    {
        scanf("%d%d%d",&n,&l,&r);
        for(int i=1;i<=n;i++) scanf("%d",&a[i].num);
        for(int i=1;i<=n;i++) {scanf("%d",&a[i].id); k[i]=a[i].id;}
        sort(a+1,a+n+1,cmp);
        b[1]=r;
        bool flag=1;
        for(int i=2;i<=n;i++)
        {
            /*
            if (b[i-1]-a[i-1].num-1+a[i].num<l ||
                    b[i-1]-a[i-1].num-1+a[i].num>r)
            {
                flag=0;
                break;
            }
           b[i]=b[i-1]-a[i-1].num-1+a[i].num;
           //以上是错误的,只考虑了差是连续,若是不连续没考虑。
           */
           if (b[i-1]-a[i-1].num-1+a[i].num>=l)
           {
               b[i]=b[i-1]-a[i-1].num-1+a[i].num;
               if (b[i]>r) b[i]=r;  //使差减小得更多。
           }
           else  { flag=0; break; }
        }
        if (!flag) printf("-1");
           else{
                 for(int i=1;i<=n;i++)
                 {
                     if (i-1) printf(" ");
                     printf("%d",b[n-k[i]+1]);
                 }
               }
         printf("
    ");
        return 0;
    }
  • 相关阅读:
    Basic4android v3.20 发布
    KbmMW 4.40.00 正式版发布
    Devexpress VCL Build v2013 vol 13.2.2 发布
    KbmMW 4.40.00 测试发布
    kbmMWtable for XE5 接近尾声
    使用delphi 开发多层应用(二十一)使用XE5 RESTClient 直接访问kbmmw 数据库
    为什么有些东西,反反复复总是学不会
    心灵沟通
    <转>离婚前夜悟出的三件事
    c++ socket 客户端库 socks5 客户端 RudeSocket™ Open Source C++ Socket Library
  • 原文地址:https://www.cnblogs.com/stepping/p/6364257.html
Copyright © 2020-2023  润新知