제출 #339609

#제출 시각아이디문제언어결과실행 시간메모리
339609bigDuck선물상자 (IOI15_boxes)C++14
100 / 100
732 ms294028 KiB
#include "boxes.h"

#include<bits/stdc++.h>
using namespace std;
#define INIT  ios_base :: sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
#define mp make_pair
#define pb push_back
#define ft first
#define sc second
#define ll long long
#define pii pair<int, int>
#define count_bits __builtin_popcount
#define int ll



int p1[10000010], p2[10000010];

long long delivery(int32_t N, int32_t K, int32_t L, int32_t p[]) {

    int n=N, k=K, l=L;
    int ac=k;
    int cr=0;
    for(int i=0; i<n; i++){
        if(p[i]>0){ac--;}
        if(ac==0){
            cr=cr+p[i]*2; p1[i]=min(cr, (i>=(k))?(p1[i-k]+2*p[i]):(p[i]*2) );
            ac=k;
        }
        else{
            p1[i]=min(cr+p[i]*2, (i>=(k))?(p1[i-k]+2*p[i]):(p[i]*2) );
        }
    }
    cr=0; ac=k;
    for(int i=n-1; i>=0; i--){
        if(p[i]>0){ac--;}
        if(ac==0){
            cr=cr+(l-p[i])*2; p2[i]=min(cr, ( ((n-i-1)>=k)?(p2[i+k]+2*(l-p[i]) ):((l-p[i])*2) )  ) ;
            ac=k;
        }
        else{
            p2[i]=min(cr+(l-p[i])*2, ( ((n-i-1)>=k)?(p2[i+k]+2*(l-p[i]) ):((l-p[i])*2) )  ) ;
        }
    }

    int mn=1e17; mn=mn*10;
    mn=min(mn, p2[0]);
    for(int i=0; i<n; i++){
        mn=min(p1[i]+p2[i+1], mn);
    }
    for(int i=0; i<n; i++){
        mn=min(mn, p2[i]+( ( (i/k)+( ( (i%k)>0 )?(1):(0) ) )*l ));
        mn=min(mn, p1[i]+( ( (n-i-1)/k+( ( ((n-i-1)%k)>0 )?(1):(0) ) )*l  ) );
    }
    for(int i=0; i<n; i++){
        if( (i-k)>=0 ){
            mn=min(p2[i+1]+p1[i-k]+l, mn);
        }
    }
    mn=min(mn, ( (n/k)+ ( ((n%k)>0)?(1):(0) ) )*l );
   return mn;
}
#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...