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;
}
该博客主要介绍了USACO竞赛中的一道题目——修理牛棚(BarnRepair),通过C++代码展示了如何计算在有限木板资源下,如何安排牛的位置以使牛棚连接。博客内容包括问题背景、输入输出解析、算法思路及完整的程序实现,适合计算机科学和编程爱好者学习参考。
684

被折叠的 条评论
为什么被折叠?



