Submission #1332689

#TimeUsernameProblemLanguageResultExecution timeMemory
1332689simplemind_31Boxes with souvenirs (IOI15_boxes)C++20
20 / 100
1 ms344 KiB
#include "boxes.h"
#include <bits/stdc++.h>
#define ALL(x) x.begin(),x.end()
using namespace std;
typedef long long ll;
ll dist(int pos,int L){
    return min(pos,L-pos);
}
ll delivery(int N, int K, int L, int p[]){
    vector<ll> nums(p,p+N);
    sort(ALL(nums));
    reverse(ALL(nums));
    while(!nums.empty() && nums.back()==0)nums.pop_back();
    reverse(ALL(nums));
    while(!nums.empty() && nums.back()==L)nums.pop_back();
    if(nums.empty())return 0;
    N=nums.size();
    vector<ll> p1(N+2),p2(N+2);
    //no volver
    // k=4
    //0,1,2,3,4,5,6,7,8,9,10
    // N-K=10-4=6,N-2*K
    p1[0]=nums[0];
    for(int i=1;i<N;i++){
        p1[i]+=p1[i-1];
        if(i%K==0){
            // volver de nums[i-1] a 0 y de 0 a nums[i-1];
            p1[i]+=2*nums[i-1];
        }
        p1[i]+=nums[i]-nums[i-1];
    }
    p2[N-1]=L-nums[N-1];
    for(int i=N-2;i>=0;i--){
        p2[i]+=p2[i+1];
        if((N-i-1)%K==0){
            p2[i]+=2*(L-nums[i+1]);
        }
        p2[i]+=nums[i+1]-nums[i];
    }
    /*for(int i=0;i<N;i++){
        cout << nums[i] << ' ';
    }
    cout << endl;
    for(int i=0;i<N;i++){
        cout << p1[i] << ' ';
    }
    cout << endl;
    for(int i=0;i<N;i++){
        cout << p2[i] << ' ';
    }
    cout << endl;*/
    ll res=1e18;
    for(int i=0;i<N-1;i++){
        res=min(res,p1[i]+p2[i+1]+dist(nums[i],L)+dist(nums[i+1],L));
    }
    return min({res,p1[N-1]+dist(nums[N-1],L),p2[0]+dist(nums[0],L)});
}
#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...