[2020年10月28日普级组]1405.小B浇花
区 间 和 的 和 区间和的和 区间和的和
题目解析
就直接模拟,从最低的花的高度向最高的花的高度枚举,如果当循环变量的值到达了顶峰,但还有花的数量大于2的,就把循环上线加一(所以数组要开大些)
Code
#include <cstdio>
#include <iostream>
#define ll long long
using namespace std;
int n, a[45115], t[45115];
ll ans;
int main ()
{
int re = 999999999, te, maxt = 0;
scanf ("%d", &n);
for (int i = 1; i <= n; ++ i)
{
scanf ("%d", &te); ++ a[te];
if (te < re) re = te;
if (te > maxt) maxt = te;
}
for (int i = re; i <= maxt; ++ i)
{
if (a[i] > 1)
{
a[i + 1] += a[i] - 1;
ans = ans + a[i] - 1;
a[i] = 1;
if (i == maxt)
maxt ++;
}
}
printf ("%lld", ans);
return 0;
}