zoukankan      html  css  js  c++  java
  • 「日常训练」「小专题·USACO」 Barn Repair(1-4)

    题意

    之后补。

    分析

    这题同样也很精巧。我们不妨思考一下,如果只允许用一块木板,那么要购买多少距离?是整个的距离吗?不是,是从第一个到最后一个(哈哈哈哈哈哈哈)。但是,不包括第一个的“左边”和最后一个的“右边”。只允许用两块的时候发生了什么变化?可以想见,最好的解是将最宽的那个间隔去掉。以此类推。
    以这样的思路就可以得到题目的解法。问题在于各种各样的细节(again):样例数据里面给的牛棚按照顺序但是实际数据它未作保证;然后牛棚的距离记得-1,因为牛棚本身需要盖木板(也就是说,当木板限制大于牛数目时,最右解是每个牛棚盖长度为1的木板,也就是n)……
    这是典型的贪心思想。

    代码

    /*
    ID: samhx1
    LANG: C++14
    TASK: barn1
    */
    #include <bits/stdc++.h>
    #define MP make_pair
    #define PB push_back
    #define fi first
    #define se second
    #define ZERO(x) memset((x), 0, sizeof(x))
    #define ALL(x) (x).begin(),(x).end()
    #define rep(i, a, b) for (ll i = (a); i <= (b); ++i)
    #define per(i, a, b) for (ll i = (a); i >= (b); --i)
    #define QUICKIO                  
        ios::sync_with_stdio(false); 
        cin.tie(0);                  
        cout.tie(0);
    using namespace std;
    using ll = long long;
    using ull = unsigned long long;
    using pi = pair<ll,ll>;
    
    int main()
    {
        freopen("barn1.in","r",stdin);
        freopen("barn1.out","w",stdout);
    
        int stall[205];
        int m,s,c;
        cin>>m>>s>>c;
        if(m>=c) { cout<<c<<endl; return 0; }
        rep(i,1,c)
            cin>>stall[i];
        sort(stall+1,stall+c+1);
    
        stall[0]=0;
        int delta[205];
        rep(i,1,c)
            delta[i]=stall[i]-stall[i-1]-1;
        sort(delta+2,delta+c+1);
    
        int ans=0;
        rep(i,0,m-2)
            ans+=delta[c-i];
        cout<<s-ans-(stall[1]-1)-(s-stall[c])<<endl;
    
        return 0;
    }
    如非注明,原创内容遵循GFDLv1.3发布;其中的代码遵循GPLv3发布。
  • 相关阅读:
    asp.net mvc4 webapi request获取参数
    各种加密和解密算法的实现
    SQL 排序的简单用法
    aiofiles拆分大文件
    21.11.16模拟 学校
    P3178 [HAOI2015]树上操作
    21.11.16模拟 bzoj3306树
    SP1557 GSS2 Can you answer these queries II
    21.11.16模拟 问题
    21.11.16模拟 真菌
  • 原文地址:https://www.cnblogs.com/samhx/p/9652060.html
Copyright © 2011-2022 走看看