zoukankan      html  css  js  c++  java
  • C. Polycarp Restores Permutation

    链接:https://codeforces.com/contest/1141/problem/C

    题意:

    给n-1个数,

    qi=pi+1pi

    p为1-n的排列序列

    q为给的序列。

    根据q求出p, 求不出时为-1。

    思路:

    另p数组首个为0.求出p数组,再得到p数组中最小的值,将p中所有数减掉最小值再加1得到原p。

    同时记录原p中每个数出现的次数。超过一次,说明不能还原 。

    代码:

    #include <bits/stdc++.h>
    
    using namespace std;
    
    typedef long long LL;
    
    const int MAXN = 2e5 + 10;
    
    LL a[MAXN];
    map<LL, int> b;
    
    int main()
    {
        int n, v;
        cin >> n;
        a[0] = 0;
        LL sum = 0, mmin = 0;
        for (int i = 2;i <= n;i++)
        {
            cin >> v;
            a[i] = a[i - 1] + v;
            sum += a[i];
            mmin = min(mmin, a[i]);
        }
        for (int i = 1;i <= n;i++)
        {
            a[i] = a[i] - mmin + 1;
            if (b[a[i]] == 1 || a[i] > n)
            {
                cout << -1 << endl;
                return 0;
            }
            b[a[i]] = 1;
        }
        for (int i = 1;i <= n;i++)
            cout << a[i] << ' ' ;
        cout << endl;
    
    
        return 0;
    }
    

      

  • 相关阅读:
    Java 条件语句
    Java循环
    Java 变量
    Java 数据类型
    nginx+php发布网站
    安装MySQL5.7
    docker-compose参数
    部署
    dockerfile编写
    在VMware中安装CentOS7
  • 原文地址:https://www.cnblogs.com/YDDDD/p/10570961.html
Copyright © 2011-2022 走看看