51nod 2519 小b浇花
题目链接:http://class.51nod.com/Challenge/Problem.html#problemId=2519
一、题目描述
小b养了n盆花,第i盆花高度为A[i]。
小b每天可以给某一盆花浇水,这样这盆花就会长高一单位。
小b希望每盆花都是独一无二的,也就是不存在两盆花高度相等。
求小b最少要浇几天水。
输入描述
第一行输入一个非负整数n; 第二行输入n个非负整数,表示A[i]; 其中0≤n≤40000,0≤A[i]<40000
输出描述
输出一个非负整数,表示答案。
样例输入
6 3 2 1 2 1 7
样例输出
6
二、 解题思路
本题并不需要复杂的技巧,只需要考虑清楚处理的逻辑。
我们先对所有花按照高度排序,如果所有高度均不相等,则不需要浇水。
如果高度相等,那么如何处理呢?为了让所有花高度都不相同,我们仍然让a数组保持升序。
因此如果a[i] <= a[i],则让a[i] = a[i-1] + 1。
因为这已经是最少的修改了。最终统计一下所有修改后的a[i]减去原来的a[i]就可以了
三、代码描述
#include<cstdio> #include<iostream> #include<algorithm> using namespace std; int n, a[40010], ans, tmp; int main(){ cin >> n; for(int i = 1;i <= n;i++){ cin >> a[i]; } sort(a+1,a+n+1); for(int i = 2;i <= n;i++){ if(a[i] <= a[i-1]){ tmp = a[i]; a[i] = a[i-1] + 1; ans += a[i] - tmp; } } cout << ans << endl; return 0; }