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

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


#include

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'<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<else{
            for(int i=pos;i>=1;i--){
                if(!vis[i]){
                    ans+=a[i];
                    cnt++;
                }
                if(cnt==n)
                    break;
            }
            cout<return 0;
}

你可能感兴趣的:(Codeforces-985C - Liebig's Barrels (思维+贪心))