[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;	
} 
posted @ 2020-10-30 22:04  unknown_future  阅读(50)  评论(0编辑  收藏  举报