제출 #236918

#제출 시각아이디문제언어결과실행 시간메모리
236918DS007Building Bridges (CEOI17_building)C++14
0 / 100
25 ms4736 KiB
#include <bits/stdc++.h>
using namespace std;
#define int long long

const int H = 1e3, N = 1e5;

int solveTestCase() {
    int n;
    cin >> n;

    int h[n], w[n];
    for (int i = 0; i < n; i++) cin >> h[i];
    for (int i = 0; i < n; i++) cin >> w[i];

    int best[H + 1];
    fill(best, best + H + 1, 1e18);
    best[h[0]] = -w[0];
    int pref = w[0];
    map<int, int> m;
    m[h[0]] = -w[0];

    for (int i = 1; i < n; i++) {
        int temp = (h[i] - h[0]) * (h[i] - h[0]) + pref - w[0];
        for (int j = 0; j <= 1e3 && j + h[i] <= H; j++) {
            if (best[h[i] + j] == 1e18)
                continue;
            temp = min(temp, j * j + pref + best[h[i] + j]);
        }
        for (int j = -1; abs(j) <= 1e3 && j + h[i] >= 0; j--) {
            if (best[h[i] + j] == 1e18)
                continue;
            temp = min(temp, j * j + pref + best[h[i] + j]);
        }

        if (h[0] <= h[n - 1]) {
            auto itr = m.lower_bound(h[i]);
            if (itr != m.begin())
                --itr, temp = min(temp, (h[i] - itr->first) * (h[i] - itr->first) + pref + itr->second);
        } else {
            auto itr = m.lower_bound(h[i]);
            if (itr != m.end())
                temp = min(temp, (h[i] - itr->first) * (h[i] - itr->first) + pref + itr->second);
        }

        pref += w[i];
        if (m.count(h[i]))
            m[h[i]] = min(m[h[i]], temp - pref);
        else
            m[h[i]] = temp - pref;

        best[h[i]] = min(best[h[i]], temp - pref);
        if (i == n - 1)
            return cout << temp, 0;
    }
}

signed main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    cout.tie(nullptr);

    int test = 1;
    // cin >> test;
    while (test--)
        solveTestCase();
}

컴파일 시 표준 에러 (stderr) 메시지

building.cpp: In function 'long long int solveTestCase()':
building.cpp:55:1: warning: control reaches end of non-void function [-Wreturn-type]
 }
 ^
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...