Submission #1085477

#TimeUsernameProblemLanguageResultExecution timeMemory
1085477alexddBoxes with souvenirs (IOI15_boxes)C++17
100 / 100
636 ms333176 KiB
#include "boxes.h"
#include <bits/stdc++.h>
using namespace std;
const long long INF = 1e18;
long long dple[10000005],dpri[10000005];
vector<int> a;
long long delivery(int N, int K, int L, int p[])
{
    a.push_back(0);
    for(int i=0;i<N;i++)
        if(p[i]!=0)
            a.push_back(p[i]);
    N = (int)a.size()-1;
    a.push_back(L);
    K = min(K, N);
    if(N==0)
    {
        return 0;
    }
    for(int r=0;r<K;r++)
    {
        dple[r] = a[r]*2;
        for(int i=r+K;i<=N;i+=K)
            dple[i] = dple[i-K] + a[i]*2;
    }
    for(int r=0;r<K;r++)
    {
        dpri[r] = (L-a[N-r+1])*2;
        for(int i=r+K;i<=N;i+=K)
            dpri[i] = dpri[i-K] + (L-a[N-i+1])*2;
    }
    long long rez=INF;
    for(int cntle=0;cntle<=N;cntle++)
    {
        if(a[cntle] >= (L+1)/2 || a[min(N+1,cntle+K)] < (L+1)/2)
            continue;
        for(int cntc=0;cntle+cntc*K<=N;cntc++)
        {
            int cntri = N - cntle - cntc*K;
            rez = min(rez, dple[cntle] + dpri[cntri] + 1LL*L*cntc);
        }
    }
    return rez;
}
/*
3 2 8
1 2 5
output: 10

*/
#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...