Submission #639384

#TimeUsernameProblemLanguageResultExecution timeMemory
639384BenmathBoxes with souvenirs (IOI15_boxes)C++14
20 / 100
1 ms212 KiB
#include<bits/stdc++.h> #include "boxes.h" using namespace std; long long delivery(int N, int K, int L, int p[]) { long long int dp1[N]; long long int dp2[N]; dp1[0]=p[0]; int t1=-1; for(int i=0;i<N;i++){ if(p[i]!=0){ t1=i; break; } } if(t1==-1){ return 0; } for(int i=1;i<N;i++){ if(i%K==t1%K){ long long int r=min(p[i-1],L-p[i-1]); r=r+p[i]; dp1[i]=dp1[i-1]+r; }else{ long long int r=p[i]-p[i-1]; dp1[i]=dp1[i-1]+r; } } dp2[N-1]=L-p[N-1]; for(int i=N-2;i>=0;i--){ int j=N-1-i; if(j%K==0){ long long int r=min(p[i+1],L-p[i+1]); r=r+L-p[i]; dp2[i]=dp2[i+1]+r; }else{ long long int r=p[i+1]-p[i]; dp2[i]=dp2[i+1]+r; } } long long int so1=min(p[N-1],L-p[N-1]); so1=so1+dp1[N-1]; long long int so2=min(p[0],L-p[0]); so2=so2+dp2[0]; long long int ans=min(so1,so2); for(int i=0;i<(N-1);i++){ long long int ro1=min(p[i],L-p[i]); ro1=ro1+dp1[i]; long long int ro2=min(p[i+1],L-p[i+1]); ro2=ro2+dp2[i+1]; long long int ro=ro1+ro2; ans=min(ans,ro); } return ans; } /* int main(){ int n,k,l; cin>>n>>k>>l; int arr[n]; for(int i=0;i<n;i++){ cin>>arr[i]; } cout<<delivery(n,k,l,arr); } */
#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...