제출 #1143209

#제출 시각아이디문제언어결과실행 시간메모리
1143209Sang선물상자 (IOI15_boxes)C++20
100 / 100
490 ms274348 KiB
#include<bits/stdc++.h> using namespace std; #define int long long #define FOR(i, a, b) for (int i = (a), _b = (b); i <= _b; i++) #define FORD(i, a, b) for (int i = (a), _b = (b); i >= _b; i--) #define fi first #define se second #define pb push_back #define ALL(a) (a).begin(), (a).end() #define task "kbsiudthw" typedef vector<int> vi; typedef pair<int, int> ii; typedef pair<int, ii> pii; const int N = 1e5 + 5; const int INF = 0x3f3f3f3f; const int MOD = 1e9 + 2277; long long delivery(int32_t N, int32_t K, int32_t L, int32_t p[]) { vector<vector<long long>> dp(2, vector<long long>(N + 5, 0)); deque<int> dq; dq.push_back(0); FOR (i, 1, N){ while (dq.front() + K < i) dq.pop_front(); dp[0][i] = dp[0][dq.front()] + min(L, p[i-1] * 2); while (!dq.empty() && dp[0][dq.back()] >= dp[0][i]) dq.pop_back(); dq.push_back(i); } dq.clear(); dq.pb(N+1); FORD(i, N, 1){ while (dq.front() - K > i) dq.pop_front(); dp[1][i] = dp[1][dq.front()] + min(L, (L - p[i-1]) * 2); while (!dq.empty() && dp[1][dq.back()] >= dp[1][i]) dq.pop_back(); dq.push_back(i); } long long ans = 1e18; FOR (i, 0, N) ans = min(ans, dp[0][i] + dp[1][i+1]); return ans; } //signed main(){ // ios_base::sync_with_stdio(0); // cin.tie(0); cout.tie(0); // if (fopen(task".inp", "r")){ // freopen(task".inp", "r", stdin); // freopen(task".out", "w", stdout); // } // int p[] = {1, 2, 5}; // cout << delivery(3, 2, 8, 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...