WA一个点,求助
查看原帖
WA一个点,求助
13284
piggy楼主2020/10/4 21:41
#include <cstdio>
#include <algorithm>
using namespace std;
int ans=2147483647,cnt=0,n,a[300005],b[300005],c[300005],d[300005];
bool cmp(int x,int y){return b[x]==b[y] ? x<y : b[x]>b[y];}

int main()
{
	scanf("%d",&n);
	for (int i=1; i<=n; i++) scanf("%d",&a[i]);
	sort(a+1,a+n+1);
	for (int i=1; i<=n; i++)
	{
		if (a[i]==a[i-1])
			b[cnt]++;
		else
		{
			if (a[i]==a[i-1]+1) b[++cnt]++,d[cnt]=a[i];
			else b[++cnt]=0,d[cnt]=a[i-1]+1,b[++cnt]++,d[cnt]=a[i];
		}
	}
	for (int i=1; i<=cnt; i++) c[i]=i;
	sort(c+1,c+cnt+1,cmp);
	while (b[c[1]]>0)
	{
		int tmp=1,k=c[1];
		b[k]--;
		while (b[k+1]>=b[k] && d[k+1]==d[k]+1 && b[k+1]>0) b[k+1]--,k++,tmp++;
		if (ans>tmp) ans=tmp;
		sort(c+1,c+cnt+1,cmp);
	}
	printf("%d",ans);
	return 0;
}
2020/10/4 21:41
加载中...