• 完美的序列


    完美的序列

    题目描述:
    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;
    }
  • 相关阅读:
    各进制转换
    免root xshell连接termux
    sqlmap怎么拿shell
    SSRF漏洞
    国外安全网站、社区论坛、博客、公司、在线工具等整合收集
    渗透测试常用工具问题总结
    cdn绕过
    xss注入
    永恒之蓝(msf17010)kali复现
    文件上传漏洞和绕过
  • 原文地址:https://www.cnblogs.com/cax1165/p/6070896.html
Copyright © 2020-2023  润新知