完美的序列
来源:互联网 发布:迅捷网络的登录页面 编辑:程序博客网 时间:2024/05/22 14:07
完美的序列
题目描述:
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;}
1 0
- 完美的序列
- bzoj1006 神奇的国度【完美消除序列】
- 网教26. 完美序列
- 最长完美子序列
- upc 4874 完美序列
- [完美消除序列]BZOJ1006: [HNOI2008]神奇的国度
- [BZOJ1006][[HNOI2008]神奇的国度][MCS,完美消除序列]
- [BZOJ1006]神奇的国度(完美消除序列)
- MCS求完美消去序列
- BITCS2016程序设计 | 26. 完美序列
- 完美理解Android序列化
- 51Nod-1780-完美序列
- 二维dp 之 完美序列
- 求数组的最长递增子序列VS吉哥系列故事——完美队形
- BZOJ 1006 神奇的国度[弦图 MCS求完美消除序列]
- [弦图 最小染色 完美消除序列 MCS算法] BZOJ 1006 [HNOI2008]神奇的国度
- 弦图与完美消除序列(bzoj 1006: [HNOI2008]神奇的国度)
- 弦图 完美消除序列 MCS算法
- Java学习(让我记录下这有趣的故事:2016/10/31)
- [斐波那契数列 求解二次剩余&二次模方程 BSGS] COGS 2114 [CodeChef FN]斐波那契数
- 【JDK源码阅读4-util】Collection-List---LinkedList
- 位运算
- 计算函数count
- 完美的序列
- 设计模式--装饰者模式
- HDU 5971 icpc 大连 A Wrestling Match
- read .txt file
- c语言内存分配与释放
- 指向指针的指针
- leetcode_414. Third Maximum Number 返回数组中第三大的数,要求用O(n)的时间复杂度
- 剑指Offer(面试题43~45)
- 最小生成树+并查集+ kruskal