Submission #1294585

#TimeUsernameProblemLanguageResultExecution timeMemory
1294585ghammazhassanBoxes with souvenirs (IOI15_boxes)C++20
100 / 100
550 ms196252 KiB
#include "boxes.h"
#include <iostream>
#include <cmath>
#include <algorithm>
#include <map>
#include <unordered_map>
#include <vector>
#include <iomanip>
#include <string>
#include <queue>
#include <set>
#include <deque>
using namespace std;
#define ll long long

int n,k,l;
ll delivery(int N,int K,int L, int b[]){
    n=N,k=K,l=L;
    k=min(k,n);
    vector<ll>a1,a2;
    a1.push_back(0);
    a2.push_back(0);
    for (int i=0;i<n;i++){
        if (b[i]<=l/2){
            a1.push_back(b[i]);
        }
        else{
            a2.push_back(l-b[i]);
        }
    }
    sort(a1.begin(),a1.end());
    sort(a2.begin(),a2.end());
    int n1=a1.size(),n2=a2.size();
    vector<ll>pr1(n1),pr2(n2);
    for (int i=1;i<n1;i++){
        pr1[i]=a1[i];
        if (i>=k){
            pr1[i]+=pr1[i-k];
        }
    }
    for (int i=1;i<n2;i++){
        pr2[i]=a2[i];
        if (i>=k){
            pr2[i]+=pr2[i-k];
        }
    }
    ll c=2*(pr1[n1-1]+pr2[n2-1]);
    for (int i=1;i<k;i++){
        if (i>=n1)break;
        if (k-i>=n2)continue;
        c=min(c,l+2*(pr1[n1-i-1]+pr2[n2-(k-i)-1]));
    }
    return c;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...