Submission #1156942

#TimeUsernameProblemLanguageResultExecution timeMemory
1156942Zero_OP선물상자 (IOI15_boxes)C++20
100 / 100
508 ms196100 KiB
#include <bits/stdc++.h> using namespace std; //loops (warning : long long) #define FOR(i, l, r) for(int i = (l); i < (r); ++i) #define ROF(i, r, l) for(int i = (r - 1); i >= l; --i) //pairs, tuples #define mp make_pair #define mt make_tuple #define ff first #define ss second //vectors #define all(v) begin(v), end(v) #define rall(v) rbegin(v), rend(v) #define pb push_back #define eb emplace_back #define sum_of(v) accumulate(all(v), 0ll) #define sz(v) (int)v.size() #define compact(v) v.erase(unique(all(v)), end(v)) //binary search #define lwb lower_bound #define upb upper_bound //other stuffs #define dbg(x) "[" #x " = " << (x) << "]" #define file(task) if(fopen(task".inp", "r")){ freopen(task".inp", "r", stdin); freopen(task".out", "w", stdout); } template<typename T> bool minimize(T& a, const T& b){ if(a > b) return a = b, true; return false; } template<typename T> bool maximize(T& a, const T& b){ if(a < b) return a = b, true; return false; } using ll = long long; using ull = unsigned long long; using ld = long double; using db = double; using pi = pair<int, int>; using pl = pair<ll, ll>; using vi = vector<int>; using vb = vector<bool>; using vl = vector<ll>; using vpi = vector<pi>; using vpl = vector<pl>; mt19937_64 rng(chrono::steady_clock::now().time_since_epoch().count()); ll delivery(int N, int K, int L, int p[]){ int mid = L >> 1; sort(p, p+N); vl pref(N+1); FOR(i, 0, N){ int j = max(0, i - K + 1); ll cur = (j > 0 ? pref[j-1] : 0); if(p[j] <= mid && p[i] > mid){ cur += L; } else if(p[j] <= mid && p[i] <= mid){ cur += p[i] * 2; } else{ cur += (L - p[j]) * 2; } pref[i] = cur; } vl suff(N+1); ROF(i, N, 0){ int j = min(N, i+K) - 1; ll cur = suff[j+1]; if(p[i] <= mid && p[j] > mid){ cur += L; } else if(p[i] <= mid && p[j] <= mid){ cur += p[j] * 2; } else{ cur += (L - p[i]) * 2; } suff[i] = cur; } ll ans = min(pref[N-1], suff[0]); FOR(i, 0, N-1){ minimize(ans, pref[i] + suff[i+1]); } return ans; } #ifdef LOCAL int main(){ ios_base::sync_with_stdio(0); cin.tie(0); freopen("in.txt", "r", stdin); int N, K, L; cin >> N >> K >> L; int position[N]; FOR(i, 0, N) cin >> position[i]; cout << delivery(N, K, L, position) << '\n'; return 0; } #endif
#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...