1.3 barn1

/*
ID:15521201
LANG:C++
PROG:barn1
*/
#include <iostream>
#include <cstdio>


using namespace std;




int main()
{
    freopen("barn1.in","r",stdin);
    freopen("barn1.out","w",stdout);
    int m,s,c,sum,cow[210],distance[210],k,t;
    int start,begin,end;
    int a,b;
    cin>>m>>s>>c;
    if(c<=m)
        sum=c;
    else if(c>m)
    {
        for(int i=1;i<=s;i++)
            cow[i]=0;
        while(c--)
        {
            cin>>t;
            cow[t]++;
        }
        for(int i=1;i<=s;i++)
        {
            if(cow[i]==1)
            {
                begin=i;
                break;
            }
        }
        for(int i=s;i>=1;i--)
        {
            if(cow[i]==1)
            {
                end=i;
                break;
            }
        }
        k=0;
        a=begin+1;
        for(int i=begin+1;i<=end;i++)
        {
            if(cow[i]==1)
            {
                b=i;
                distance[k++]=b-a-1;
                a=b;
            }
        }
        for(int i=0;i<k-1;i++)
            for(int j=0;j<k-1-i;j++)
                if(distance[j]<distance[j+1])
                {
                    t=distance[j];
                    distance[j]=distance[j+1];
                    distance[j+1]=t;
                }
        sum=end-begin+1;
        for(int i=0;i<m-1;i++)
            sum-=distance[i];
    }
    cout<<sum<<endl;
    return 0;
}


题目好难看懂,(/哭)没办法,只能一个一个查字典,看懂题目后,他的意思就是可以提供的木板数量(m,木版可以任意长,一个牛棚占木板长度为1),
牛棚总数(n,一个牛棚一头牛),牛的数量(c,接下来会给出哪些牛鹏中有牛),要求就是所有有牛的牛鹏都要被木板遮挡,且要求所用的总的木板长度
最小,如果可以的话,谁都想全部都遮住,一块木板就行了,但是要求总长度最小且木板数量受限制,首先考虑什么时候木版数量不受限制,也就是要遮住
的有牛牛棚的数量小于等于木板数的时候,当木板数量受限制时,可以整体来考虑(因为当有牛牛棚大于木板数量时,避免不了要连体,也就是一块木板要
连着多间牛棚,其中还有可能是空的牛鹏),先把第一个有牛牛棚到最后一个有牛棚连起来,然后看所要求的木板数(m),则意味着其中有m-1个间隔,也
就是说只要满足在c头牛之间的c-1个间隔中选取出最大的间隔的前m-1个,再用整体减去这m-1个间隔就可以了,所以代码如上。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值