Submission #1187682

#TimeUsernameProblemLanguageResultExecution timeMemory
1187682simona1230Boxes with souvenirs (IOI15_boxes)C++17
100 / 100
377 ms274348 KiB
#include "boxes.h"
#include <bits/stdc++.h>
using namespace std;

long long n,k,l;
const long long maxn=1e7+5;
long long a[maxn];
long long p[maxn];
long long s[maxn];

long long delivery(int N, int K, int L, int P[])
{
    long long id=0;
    for(long long i=0; i<N; i++)
        if(P[i]==0)id=i+1,N--;
    n=N;
    k=K;
    l=L;
    for(long long i=0; i<n; i++)
        a[i]=P[id+i];

    for(long long i=0; i<n; i++)
    {
        p[i]=a[i]*2;
        if(i-k>=0)p[i]+=p[i-k];
    }

    for(long long i=n-1; i>=0; i--)
    {
        s[i]=(l-a[i])*2;
        if(i+k<=n-1)s[i]+=s[i+k];
    }

    long long ans=s[0];
    if(n<=k)ans=min(ans,l);

    for(int i=0; i<n; i++)
        ans=min(ans,p[i]+s[i+1]);

    if(n>k)
    {
        ans=min(ans,l+p[n-k-1]);
        ans=min(ans,l+s[k]);
        for(int i=0; i<n; i++)
            if(i+k+1<=n-1)ans=min(ans,p[i]+l+s[i+k+1]);
    }

    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...