zoukankan      html  css  js  c++  java
  • 完美的序列

    完美的序列

    题目描述:
    LYK 认为一个完美的序列要满足这样的条件:对于任意两个位置上的数都不相同。然而并不是所有的序列都满足这样的条件。
    于是 LYK 想将序列上的每一个元素都增加一些数字(当然也可以选择不增加),使得整个序列变成美妙的序列。
    具体地, LYK 可以花费 1 点代价将第 i 个位置上的数增加 1,现在 LYK 想花费最小的代价使得将这个序列变成完美的序列。
    输入格式:
    第一行一个数 n,表示数字个数。
    接下来一行 n 个数 ai 表示 LYK 得到的序列。
    输出格式:
    一个数表示变成完美的序列的最小代价。
    输入样例:
    4
    1 1 3 2
    输出样例:
    3
    数据范围:
    对于 30%的数据 n<=5。
    对于 60%的数据 n<=1000。
    对于 80%的数据 n<=30000, ai<=3000。
    对于 100%的数据 n<=100000, 1<=ai<=100000。
    思路:
    要让序列变成一个不含相同元素的
    首先排序
    排完序后只需让序列变成一个严格上升的序列
    现在让a[i]=a[i]-i
    这样处理后只需让序列变成一个不降序列就保证了原序列是上升序列
    (因为a[i]比a[i-1]多减了1,只需a[i]不比a[i-1]小即可)

    #include<iostream>
    #include<cstdio>
    #include<algorithm>
    using namespace std;
    const int maxn=100010;
    int n,ans,a[maxn];
    int main()
    {
        freopen("sequence.in","r",stdin);
        freopen("sequence.out","w",stdout);
        scanf("%d",&n);
        for(int i=1;i<=n;i++)
        scanf("%d",&a[i]);
        sort(a+1,a+n+1);
        for(int i=2;i<=n;i++)
        {
            if(a[i]==a[i-1])
            a[i]++,ans++;
            else if(a[i]<a[i-1])
            {
                ans+=a[i-1]-a[i]+1;
                a[i]=a[i-1]+1;
    
            }
        }
        cout<<ans;
        fclose(stdin);fclose(stdin);
        return 0;
    }
  • 相关阅读:
    Python环境变量的配置
    关于selenium+python的googledirver和iedirver的配置
    jdk1.6环境变量配置
    windows server 2012R2安装激活码
    Git生成SSHKey
    Linux下配置和安装VNCServer远程服务
    Win7 64位硬盘安装Ubuntu 64位的细微配置
    apache tomcat 8.0 显示目录文件
    跨域登录
    jsonp 代码优化
  • 原文地址:https://www.cnblogs.com/cax1165/p/6070896.html
Copyright © 2011-2022 走看看