제출 #362952

#제출 시각아이디문제언어결과실행 시간메모리
362952LucaDantas선물상자 (IOI15_boxes)C++17
10 / 100
1 ms384 KiB
#include "boxes.h" #include<vector> #include<cstdio> #include<algorithm> using namespace std; #define pb push_back #define sz(a) (int)(a.size()) long long delivery(int N, int K, int L, int p[]) { long long ans = 0; int meio = 0; vector<int> esq, dir; for(int i = 0; i < N; i++) { if(!p[i]) continue; if(p[i] <= (L-1)/2) esq.pb(p[i]); if(2ll*p[i] == L) ++meio; if(p[i] >= L - (L-1)/2) dir.pb(L - p[i]); } ans += 1ll*(meio/K)*N; meio %= K; reverse(esq.begin(), esq.end()); vector<int> opa; int last = 0; for(int i = 0; i+K-1 < sz(esq); i += K) { ans += 2ll*esq[i]; last = i+K; } for(int i = last; i < sz(esq); i++) opa.pb(esq[i]); esq = opa; opa.clear(); for(int i = 0; i+K-1 < sz(dir); i += K) { ans += 2ll*dir[i]; last = i+K; } for(int i = last; i < sz(dir); i++) opa.pb(dir[i]); dir = opa; long long outro = 0x3f3f3f3f3f3f3f3f; if(!meio) outro = 2ll*((sz(esq)?esq[0]:0) + (sz(dir)?(dir[0]):0)); esq.pb(0); reverse(esq.begin(), esq.end()); reverse(dir.begin(), dir.end()); dir.pb(L); for(int i = 0; i <= min(K - meio, sz(esq)-1); i++) outro = min(outro, 2ll*esq[i]+L+2ll*(dir[min(K-meio-i, sz(dir)-1)])); return ans + outro; }
#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...