제출 #786515

#제출 시각아이디문제언어결과실행 시간메모리
786515esomer선물상자 (IOI15_boxes)C++17
100 / 100
507 ms247496 KiB
#include<bits/stdc++.h> #include "boxes.h" using namespace std; typedef long long ll; ll delivery(int n, int k, int L, int* positions){ vector<ll> prefix(n, 0); vector<ll> suffix(n, 0); //~ multiset<ll> s; for(int i = 0; i < n; i++){ ll mn = 1e18; if(i - k < 0) mn = 0; else mn = prefix[i-k]; //~ else mn = *s.begin(); ll cost = positions[i] + min(L - positions[i], positions[i]); prefix[i] = mn + cost; //~ s.insert(prefix[i]); //~ if(i - k >= 0) s.erase(s.find(prefix[i-k])); } //~ s.clear(); for(int i = n-1; i >= 0; i--){ ll mn = 1e18; if(i + k >= n) mn = 0; else mn = suffix[i+k]; //~ else mn = *s.begin(); ll cost = L - positions[i] + min(L - positions[i], positions[i]); suffix[i] = mn + cost; //~ s.insert(suffix[i]); //~ if(i + k < n) s.erase(s.find(suffix[i+k])); } ll ans = min(suffix[0], prefix[n-1]); for(int i = 0; i < n-1; i++){ ans = min(ans, prefix[i] + suffix[i+1]); } return ans; } //~ int main() { //~ int N, K, L, i; //~ cin >> N >> K >> L; //~ vector<int> p(N); //~ for (i = 0; i < N; i++) { //~ cin >> p[i]; //~ } //~ fprintf(stdout, "%lld\n", delivery(N, K, L, p)); //~ return 0; //~ }
#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...