Submission #849397

#TimeUsernameProblemLanguageResultExecution timeMemory
849397abcvuitunggioBoxes with souvenirs (IOI15_boxes)C++17
100 / 100
585 ms258708 KiB
#include "boxes.h" #include <bits/stdc++.h> using namespace std; vector <int> a,b; long long res,dp[10000001],dp2[10000001]; long long delivery(int N, int K, int L, int p[]){ for (int i=0;i<N;i++) if (p[i]<=L/2) a.push_back(p[i]); else b.push_back(L-p[i]); sort(a.begin(),a.end()); sort(b.begin(),b.end()); for (int i=0;i<(int)a.size();i++) dp[i]=(i<K?0:dp[i-K])+a[i]*2; for (int i=0;i<(int)b.size();i++) dp2[i]=(i<K?0:dp2[i-K])+b[i]*2; int i=(int)a.size()-1,j=(int)b.size()-1; while (i>=0||j>=0){ pair <long long, int> mn={1e18,-1}; for (int l=0;l<=K;l++) mn=min(mn,{(i<l?0:dp[i-l])+(j<K-l?0:dp2[j-K+l]),l}); if (mn.first+L>(i<0?0:dp[i])+(j<0?0:dp2[j])){ res+=(i<0?0:dp[i])+(j<0?0:dp2[j]); break; } res+=L; i-=mn.second; j-=K-mn.second; } return res; }
#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...