Submission #362948

#TimeUsernameProblemLanguageResultExecution timeMemory
362948LucaDantas선물상자 (IOI15_boxes)C++17
20 / 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(sz(esq) == K) ans += 2ll*p[i], esq.clear(); } if(2ll*p[i] == L) ++meio; if(p[i] >= L - (L-1)/2) dir.pb(p[i]); } ans += 1ll*(meio/K)*N; meio %= K; reverse(dir.begin(), dir.end()); vector<int> opa; for(int i = 0; i < sz(dir); i++) { if((i+1)%K == 0) ans += 2ll*(L-dir[i]), opa.clear(); else opa.pb(dir[i]); } dir = opa; long long outro = 0x3f3f3f3f3f3f3f3f; if(!meio) { // posso pegar uma na esq e uma na dir outro = 2ll*((sz(esq)?esq.back():0) + (sz(dir)?L - dir.back():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*(L-dir[min(K-meio-i, sz(dir)-1)])); } // printf("%lld %lld %lld\n", ans + outro, ans, outro); 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...