제출 #235699

#제출 시각아이디문제언어결과실행 시간메모리
235699abacaba선물상자 (IOI15_boxes)C++14
0 / 100
5 ms384 KiB
#include <iostream>
#include <string>
#include <unordered_map>
#include <unordered_set>
#include <cstring>
#include <chrono>
#include <vector>
#include <map>
#include <random>
#include <set>
#include <algorithm>
#include <math.h>
#include <cstdio>
#include <stdio.h>
#include <queue>
#include <bitset>
#include <cstdlib>
#include <deque>
#include <cassert>
#include <stack>
using namespace std;

#define mp make_pair
#define f first
#define se second
#define ll long long
#define endl '\n'
#define pii pair<int, int>

inline void setin(string s) {
	freopen(s.c_str(), "r", stdin);
}

inline void setout(string s) {
	freopen(s.c_str(), "w", stdout);
}

const ll inf = 2e18;
const int mod = 1e9 + 7;
const int N = 1e7 + 15;
ll dp[2][N];

long long delivery(int n, int k, int l, int p[]) {
	for(int i = 0; i < n; ++i) {
		if(i < k)
			dp[0][i] = 2 * p[i];
        else
            dp[0][i] = dp[0][i-k] + 2 * p[i];
	}
    for(int i = n - 1; i >= 0; --i) {
        if(i + k >= n)
            dp[1][i] = 2 * (l - p[i]);
        else
            dp[1][i] = dp[1][i + k] + 2 * (l - p[i]);
    }
    ll ans = min(dp[0][n-1], dp[1][0]);
    for(int i = 1; i + 1 < n; ++i)
        ans = min(ans, dp[0][i-1] + min(p[i+1], l - p[i-1]) + dp[1][i+1]);
    for(int i = 0; i + 1 < n; ++i)
        ans = min(ans, dp[0][i] + dp[1][i+1]);
    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...