Submission #404933

#TimeUsernameProblemLanguageResultExecution timeMemory
404933EJOI2019AndrewBoxes with souvenirs (IOI15_boxes)C++14
100 / 100
550 ms252712 KiB
#include "boxes.h" #include<bits/stdc++.h> using namespace std; long long mn(int a,int b) { if(a<b) return a; return b; } long long int dp[10000009],dp1[10000009]; long long delivery(int N, int K,int L, int p[]) { if(K==N) { sort(p, p+N); int mid = L/2; int sum = 0; for(int i = 0; i < N; i++) { if(p[i] <= mid) { sum = p[i]*2; } else if(p[i] > mid) { sum+=((L-p[i])*2); break; } } return min(sum, L); } else if(K==1) { long long ans = 0; for(int i = 0; i < N; ++i) ans+=mn(p[i],L-p[i])*2; return ans; } else { int n=N,k=K; int l=L; for(int i=0;i<n;i++) { if(i<k) dp[i] = min(p[i]*2,l); else dp[i] = dp[i-k]+min(p[i]*2,l); } for(int i=n-1;i>=0;i--) { if(i>=n-k) dp1[i] = min((l-p[i])*2,l); else{ dp1[i] = dp1[i+k] +min((l-p[i])*2,l); } } long long int ans = dp1[0]; for(int i=0;i<n;i++) ans = min(ans,dp[i]+dp1[i+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...