# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
330679 | 2020-11-26T08:26:52 Z | monkey8 | 선물상자 (IOI15_boxes) | C++14 | 0 ms | 0 KB |
#include "boxes.h" #include <iostream> #include <vector> #include <algorithm> #include <string> #include <map> #include <cstdio> #include <utility> #include <queue> #include <math.h> #include <set> #include <bitset> #include <cmath> #include <bitset> #include <stack> #include <cstring> #include <deque> using namespace std; typedef long long ll; typedef pair<int, int> pii; const int MAXN = 10000010; ll pre1[MAXN]; ll pre2[MAXN]; ll delivery(int n, int k, ll l, ll p[]) { for(int i = 0; i < n; i++) { if(i < k) pre1[i] = (ll)2 * p[i]; else pre1[i] = (ll)2 * p[i] + pre1[i - k]; } for(int i = n - 1; i >= 0; i--) { if(i > n - 1 - k) pre2[i] = (ll)2 * (l - p[i]); else pre2[i] = (ll)2 * (l - p[i]) + pre2[i - k]; } ll ans = min(pre1[n - 1], pre2[0]); for(int i = 0; i < n - 1; i++) ans = min(ans, pre1[i] + pre2[i + 1]); if(n == k) return min(ans, l); ans = min(ans, min(pre1[n - k - 1] + l, pre2[k] + l)); for(int i = 0; i < n - k - 1; i++) ans = min(ans, pre1[i] + l + pre2[i + k + 1]); return ans; }