把两个牛中间的间隔空棚数量,排序就可以了
2025-12-29 22:03:44
发布于:浙江
18阅读
0回复
0点赞
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int a[205],b[205];
int main(){
ios::sync_with_stdio(false);
cin.tie(0);cout.tie(0);
int m,n,t;
cin>>m>>n>>t;
for(int i=1;i<=t;i++)cin>>a[i];
sort(a+1,a+t+1);
if(t<=m){cout<<t;return 0;}//如果牛的数量少于木板要求的数量,就是输出,牛的数量,因为一个牛一块板最省;
int cnt=t,ans=t,k=0;//先设定一共有牛的数量的木板块数,总长也是牛的数量; cnt=块数,
for(int i=2;i<=t;i++){
if(a[i]-a[i-1]==1)cnt--;//如果两个牛棚挨着,就减一块木块,总长不变;
else b[k]=a[i]-a[i-1]-1;//如果两个牛棚不挨着,就把这个差,存在新的数组里;
}
if(cnt<=m){cout<<t;return 0;}//如果精减木板,就少于m,就输出t;
sort(b+1,b+k+1);//把这个差(就是每两个不挨着的牛的中间的空棚数,排序);
for(int i=1;i<=min(k,cnt-m);i){//多几块板,我们就合并几块,最少的间距;注意遍历到k与cnt-m的最小值;
ans+=b[i];
}
cout<<ans;
return 0;
}
这里空空如也





有帮助,赞一个