• 1.3.2 Barn Repair 修理牛棚


    Description

    在一个夜黑风高,下着暴风雨的夜晚,农民约翰的牛棚的屋顶、门被吹飞了。 好在许多牛正在度假,所以牛棚没有住满。 剩下的牛一个紧挨着另一个被排成一行来过夜。 有些牛棚里有牛,有些没有。 所有的牛棚有相同的宽度。 自门遗失以后,农民约翰必须尽快在牛棚之前竖立起新的木板。 他的新木材供应商将会供应他任何他想要的长度,但是供应商只能提供有限数目的木板。 农民约翰想将他购买的木板总长度减到最少。 给出:可能买到的木板最大的数目M(1<= M<=50);牛棚的总数S(1<= S<=200); 牛棚里牛的总数C(1 <= C <=S);和牛所在的牛棚的编号stall_number(1 <= stall_number <= S),计算拦住所有有牛的牛棚所需木板的最小总长度。 输出所需木板的最小总长度作为答案。

    Input

    1 行: M , S 和 C(用空格分开) 2 到 C+1行: 每行包含一个整数,表示牛所占的牛棚的编号。

    Output

    单独的一行包含一个整数表示所需木板的最小总长度。

    Sample Input

    4 50 18
    3 
    4 
    6 
    8 
    14
    15 
    16 
    17 
    21
    25 
    26 
    27 
    30 
    31 
    40 
    41 
    42 
    43

    Sample Output

    25

    题目分析:用到去重 计算差值   选最大的前M个  具体看代码

    代码错误 没有分析重复的情况

    #include <iostream>
    #include<algorithm>
    #include<cstdlib>
    #include<cstdio>
    #include<cstring>
    #include<cmath>
    using namespace std;
    typedef long long ll;
    ll cmp(ll p,ll q)
    {
        return p>q;
    }
    int main()
    {
        ll n,m,s,c,i,j,h,sum=0,a[1010]= {0},b[1010]= {0};
        ll flag[1010]= {0},flag1[1010]= {0};
        cin>>m>>s>>c;
        for(i=0; i<c; i++)
            cin>>a[i];
        for(i=0; i<c-1; i++)
        {
            b[i]=a[i+1]-a[i];
        }
    //    for(i=0; i<c; i++)
    //        cout<<b[i];
    //    puts("");
        sort(b,b+c-1,cmp);
        for(i=m-1; i<c; i++)
            b[i]=0;
        ll k=1;
    //    for(i=0; i<c; i++)
    //        cout<<b[i];
    //    puts("");
        for(i=0; i<c; i++)
        {
            for(j=0; j<c-1; j++)
            {
                flag[i]=k;
                if(a[i+1]-a[i]==b[j]&&flag1[j]==0)
                {
                    flag1[j]=1;
                    k++;
                    break;
                }
            }
        }
    //    for(i=0; i<c; i++)
    //        cout<<flag[i];
        k=0;
        for(i=1;i<c-1;i++)
        {
            if(flag[i]!=flag[i+1])
            {
                sum+=a[i]-a[k]+1;
                k=i+1;
            }
        }
        sum+=a[c-1]-a[k]+1;
        //puts("");
        cout<<sum<<endl;
        return 0;
    }
    

    AC 代码:

    #include <iostream>
    #include<algorithm>
    #include<cstdlib>
    #include<cstdio>
    #include<cstring>
    #include<cmath>
    #include <set>
    using namespace std;
    typedef long long ll;
    ll cmp(ll p,ll q)
    {
        return p>q;
    }
    int main()
    {
        ll n,m,s,cc,i,j,h,sum=0,a[1010]= {0},b[1010]= {0};
        ll c[1010]={0};
        set<ll>se;
        cin>>m>>s>>cc;
        for(i=0; i<cc; i++)
        {
            cin>>a[i];
            se.insert(a[i]);
        }
        set<ll>::iterator it;
        i=0;
        for(it=se.begin();it!=se.end();it++)
        {
            c[i++]=*it;
        }
        cc=i;
        for(i=0; i<cc-1; i++)
        {
            b[i]=c[i+1]-c[i]-1;
        }
        sort(b,b+cc-1,cmp);
        for(i=0;i<m-1;i++)
            sum+=(b[i]);
        cout<<c[cc-1]-c[0]+1-sum<<endl;
        return 0;
    }
    
  • 相关阅读:
    Web性能压力测试工具之WebBench详解
    Request Header Or Cookie Too Large
    手动删除SVCH0ST.EXE的方法
    微信非80端口网页授权
    微信公众号开发80端口映射解决方案 推荐
    解决微信访问 80 端口的限制问题
    Windows查看所有的端口及端口对应的程序
    Windows环境下,用netstat命令查看某个端口号是否占用
    价值观--我的总结
    价值是事物由人(基于自己的需要和获取的难度而)作出的评价而存在的属性
  • 原文地址:https://www.cnblogs.com/zcy19990813/p/9702701.html
Copyright © 2020-2023  润新知