QAQ
先找连续的牛棚的数量
然后在往上合并板子,弄最小的往上添,直到减到规定的板数。
#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;
int f[9999],sum[9999];
int s=0,b=0;
void find(int x,int n)
{
int cnt=0;
for(int i=x;i<=n;i++)
if(f[i]==0) cnt++;
else break;
sum[++s]=cnt;
return;
}
int main()
{
int n,m,nb;
int min1=1e7;
int max1=-1;
scanf("%d%d%d",&m,&n,&nb);
for(int i=1;i<=nb;i++)
{
int x;
scanf("%d",&x);
f[x]=1;
min1=min(min1,x);
max1=max(max1,x);
}
for(int i=min1;i<=max1;i++)
if(f[i]==0&&f[i-1]==1) find(i,n);
for(int i=min1;i<=max1;i++)
if(f[i-1]==0&&f[i]==1) b++;;
sort(sum+1,sum+s+1);
int ans=nb;
for(int i=1;i<=b-m;i++)
ans+=sum[i];
printf("%d",ans);
return 0;
}