Codeforces-985C - Liebig's Barrels (思维+贪心)

题意:输入 n k l 你要做n个桶,每个桶需要k个木板,用木板拼好的桶相互之间体积的差距<=l,桶的体积大小就是最短的那根木板的长度大小。
http://codeforces.com/contest/985/problem/C


#include<bits/stdc++.h>

using namespace std;
const int maxn=1e5+50;
int a[maxn];
int vis[maxn];
int main(){
    int n,k,l;
    cin>>n>>k>>l;
    for(int i=1;i<=n*k;i++)
        cin>>a[i];
    sort(a+1,a+n*k+1);
    int pos;
    if(a[n]-a[1]>l){
        cout<<'0'<<endl;
         return 0;
    }else{
        for(int i=n;i<=n*k;i++){
            if(a[i]-a[1]>l){
                pos=i-1;
                break;
            }
        }
        long long ans=0;
        int cnt=0;
        for(int i=1;i<=pos;i+=k){
            ans+=a[i];
            cnt++;
            vis[i]=1;
            if(cnt==n)
                break;
        }
        if(cnt==n)
            cout<<ans<<endl;
        else{
            for(int i=pos;i>=1;i--){
                if(!vis[i]){
                    ans+=a[i];
                    cnt++;
                }
                if(cnt==n)
                    break;
            }
            cout<<ans<<endl;
        }

    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_37360631/article/details/81320600
今日推荐