제출 #1225425

#제출 시각아이디문제언어결과실행 시간메모리
1225425Hamed_Ghaffari선물상자 (IOI15_boxes)C++20
100 / 100
297 ms165872 KiB
#include <bits/stdc++.h>
using namespace std;

using ll = long long;

const int MXN = 1e7+4;

int a[MXN], b[MXN], sza, szb;
ll dpa[MXN], dpb[MXN];

ll delivery(int N, int K, int L, int p[]) {
    if(L==1) return 0;
    int lim = (L+1)/2-1;
    for(int i=0; i<N; i++)
        if(p[i]) {
            if(p[i]<=lim)
                a[sza++] = p[i];
            else
                b[szb++] = p[i];
        }
    for(int i=0; i<sza; i++) {
        dpa[i] = 2*a[i];
        if(i>=K) dpa[i] += dpa[i-K];
    }
    reverse(b, b+szb);
    for(int i=0; i<szb; i++) {
        dpb[i] = 2*(L-b[i]);
        if(i>=K) dpb[i] += dpb[i-K];
    }
    ll ans = (sza ? dpa[sza-1] : 0) + (szb ? dpb[szb-1] : 0);
    for(int i=0, j; i<=sza && i<=K; i++) {
        j = min(K-i, szb);
        ans = min(ans, L 
        + (i==sza ? 0 : dpa[sza-1-i]) 
        + (j==szb ? 0 : dpb[szb-1-j]));
    }
    return ans;
}
#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...