제출 #1332707

#제출 시각아이디문제언어결과실행 시간메모리
1332707simplemind_31선물상자 (IOI15_boxes)C++20
50 / 100
50 ms27680 KiB
#include "boxes.h"
#include <bits/stdc++.h>
#define ALL(x) x.begin(),x.end()
using namespace std;
typedef long long ll;
ll dist(ll ini,ll fin,ll L){
    return min(abs(fin-ini),min(ini,fin)+L-max(ini,fin));
}
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));
    if(nums.empty())return 0;
    N=nums.size();
    vector<ll> p1(N),p2(N);
    //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]=dist(nums[0],0,L);
    int con=K;
    con--;
    for(int i=1;i<N;i++){
        p1[i]+=p1[i-1];
        if(con==0){
            //recargar primero
            p1[i]+=dist(nums[i-1],0,L);
            p1[i]+=dist(nums[i],0,L);
            con=K-1;
            continue;
        }
        if(dist(nums[i-1],nums[i],L)!=nums[i]-nums[i-1]){
            con=K;
        }
        p1[i]+=dist(nums[i-1],nums[i],L);
        con--;
    }
    p2[N-1]=dist(nums[N-1],0,L);
    con=K;
    con--;
    for(int i=N-2;i>=0;i--){
        p2[i]+=p2[i+1];
        if(con==0){
            //recargar primero
            p2[i]+=dist(nums[i+1],0,L);
            p2[i]+=dist(nums[i],0,L);
            con=K-1;
            continue;
        }
        if(dist(nums[i+1],nums[i],L)!=nums[i+1]-nums[i]){
            con=K;
        }
        p2[i]+=dist(nums[i+1],nums[i],L);
        con--;
    }
    /*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],0,L)+dist(nums[i+1],0,L));
    }
    return min({res,p1[N-1]+dist(nums[N-1],0,L),p2[0]+dist(nums[0],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...