P1209 [USACO1.3]修理牛棚 Barn Repair - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)
#include<bits/stdc++.h>
using namespace std;
int m, s, c;
int a[210], b[210];//牛的位置, 空隙
bool cmp(int a, int b)
{
return a > b;
}
int main()
{
cin >> m >> s >> c; // m木板最大的数目, s牛棚的数量 , c牛的数量
for (int i = 1; i <= c; i++)
cin >> a[i];
if(m >= c)
{
cout << c << endl;
return 0;
}
sort(a + 1, a + 1 + c);//牛的排序
int ans = a[c] - a[1] + 1;//最大的长度
int n = 1;
for(int i = 2; i <= c; i++) //去寻找空隙
if(a[i] - a[i - 1] > 1)
{
b[n] = a[i] - a[i - 1] - 1;//空隙 边界问题要注意
n++;
}
sort(b + 1, b + 1 + n, cmp);
for(int i = 1; i < m; i++) //减去m - 1次空隙
ans -= b[i];
printf("%d",ans);
return 0;
}