Submission #1088318

#TimeUsernameProblemLanguageResultExecution timeMemory
1088318browntoadBoxes with souvenirs (IOI15_boxes)C++14
10 / 100
2040 ms348 KiB
#include <bits/stdc++.h> #include "boxes.h" using namespace std; #define ll long long // #define int ll #define FOR(i, a, b) for (int i = (a); i < (b); i++) #define REP(i, n) FOR(i, 0, n) #define REP1(i, n) FOR(i, 1, n+1) #define RREP(i, n) for (int i = (n)-1; i >= 0; i--) #define pii pair<int, int> #define f first #define s second #define pb push_back #define ALL(x) (x).begin(), (x).end() #define SZ(x) (int)((x).size()) const ll maxn = 1e5+5; ll delivery(int n, int k, int len, int pos[]){ vector<int> vc(n); REP(i, n){ vc[i] = pos[i]; } sort(ALL(vc)); if (k == 1){ ll ans = 0; REP(i, n){ ans += min(pos[i], len-pos[i]); } return ans*2; } ll ans = 0; vector<int> L, R; vector<ll> lmod(k), rmod(k); REP(i, n){ if (vc[i] < len-pos[i]) { L.pb(vc[i]); } else { R.pb(len-vc[i]); } } sort(ALL(L), greater<int> ()); sort(ALL(R), greater<int> ()); if (SZ(L) > SZ(R)) swap(L, R); for (int i = 0; i < SZ(L); i += k) ans += L[i]; for (int i = 0; i < SZ(R); i += k) ans += R[i]; ans *= 2; if (SZ(L) + SZ(R) <= k) return min((ll)(n), ans); int l = min(SZ(L), k); int r = k-l; FOR(i, l, SZ(L)){ lmod[i%k] += L[i]; } FOR(i, r, SZ(R)){ rmod[i%k] += R[i]; } while(l >= 0 && r <= SZ(R)){ ll cur = n; if (l != SZ(L)) cur += lmod[l%k]; if (r != SZ(R)) cur += rmod[r%k]; ans = min(ans, cur); if (l == 0 || r == 0){ break; } lmod[(l+k-1)%k] += L[l]; rmod[r%k] -= R[r]; } 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...