USACOBarn Repair

http://ace.delos.com/usacoprob2?a=aGfy6bAUEQK&S=barn1

额。。。比较水的题,估计没有比我的更短的程序了。。。。

先用一块木板把全部牛棚盖上,再删去(n-1)个空位,剩下的就是结果了。

删去(n-1)个空位,剩下n块牛棚,刚好符合要求,而删去的空位要最大就行了

#include <iostream>
#include <cstdio>
#include <string.h>
#include <algorithm>
using namespace std;

bool compare(int a,int b)
{
    return a>b;
}

int main()
{
    freopen("barn1.in","r",stdin);
    freopen("barn1.out","w",stdout);
    int n,len,ncow;
    cin>>n>>len>>ncow;
    int a[205]={0};
    for (int i=1;i<=ncow;i++)
        scanf("%d",&a[i]);
    sort(a+1,a+ncow+1);

    int sum=a[ncow]-a[1]+1;
    int b[205]={0};
    for (int i=1;i<=ncow-1;i++)  //计算距离差
        b[i]=a[i+1]-a[i]-1;
    sort(b+1,b+ncow,compare);      //距离差排序
    for (int i=1;i<n;i++)             //逐个删去(n-1)个空位
        sum-=b[i];
    cout<<sum<<endl;
    return 0;
}
原文地址:https://www.cnblogs.com/ay27/p/2712757.html