답안 #703784

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
703784 2023-02-28T11:41:05 Z piOOE Sightseeing in Kyoto (JOI22_kyoto) C++17
0 / 100
10 ms 8148 KB
#include <bits/stdc++.h>

using namespace std;
using ll = long long;

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

    int h, w;
    cin >> h >> w;

    vector<int> a(h), b(w);

    for (int i = 0; i < h; ++i) {
        cin >> a[i];
    }

    for (int j = 0; j < w; ++j) {
        cin >> b[j];
    }

    constexpr int inf = 1e9 + 7;

    vector<int> pref(h + 1, inf), suf(h + 1, inf);

    vector<int> rows, columns;

    for (int i = 0; i < h; ++i) {
        pref[i + 1] = min(pref[i], a[i]);
    }

    for (int i = h - 1; i >= 0; --i) {
        suf[i] = min(a[i], suf[i + 1]);
    }

    for (int i = 0; i < h; ++i) {
        if (pref[i] > a[i] || suf[i + 1] > a[i]) {
            rows.push_back(i);
        }
    }

    pref.assign(w + 1, inf), suf.assign(w + 1, inf);

    for (int i = 0; i < w; ++i) {
        pref[i + 1] = min(pref[i], b[i]);
    }

    for (int i = w - 1; i >= 0; --i) {
        suf[i] = min(b[i], suf[i + 1]);
    }

    for (int i = 0; i < w; ++i) {
        if (pref[i] > b[i] || suf[i + 1] > b[i]) {
            columns.push_back(i);
        }
    }

    for (int i = 1; i + 2 < rows.size(); ++i) {
        if (a[rows[i]] == a[rows[i + 1]]) {
            rows.erase(rows.begin() + i);
            break;
        }
    }

    for (int i = 1; i + 2 < columns.size(); ++i) {
        if (b[columns[i]] == b[columns[i + 1]]) {
            columns.erase(columns.begin() + i);
            break;
        }
    }

//    assert(unique(rows.begin(), rows.end()) == rows.end() &&
//        unique(columns.begin(), columns.end()) == columns.end());

    int n = rows.size(), m = columns.size();

    vector dp(n, vector<ll>(m));

    for (int i = 0; i < n; ++i) {
        for (int j = 0; j < m; ++j) {
            if (i == 0 && j == 0) {
                continue;
            }

            dp[i][j] = 1e18;

            if (i > 0) {
                dp[i][j] = dp[i - 1][j] + 1LL * b[columns[j]] * (rows[i] - rows[i - 1]);
            }

            if (j > 0) {
                dp[i][j] = min(dp[i][j], dp[i][j - 1] + 1LL * a[rows[i]] * (columns[j] - columns[j - 1]));
            }
        }
    }

    cout << dp[n - 1][m - 1] << '\n';

    return 0;
}

Compilation message

kyoto.cpp: In function 'int main()':
kyoto.cpp:59:27: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   59 |     for (int i = 1; i + 2 < rows.size(); ++i) {
      |                     ~~~~~~^~~~~~~~~~~~~
kyoto.cpp:66:27: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   66 |     for (int i = 1; i + 2 < columns.size(); ++i) {
      |                     ~~~~~~^~~~~~~~~~~~~~~~
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 212 KB Output is correct
2 Correct 0 ms 224 KB Output is correct
3 Correct 0 ms 212 KB Output is correct
4 Correct 0 ms 212 KB Output is correct
5 Correct 0 ms 212 KB Output is correct
6 Correct 1 ms 212 KB Output is correct
7 Correct 1 ms 212 KB Output is correct
8 Correct 0 ms 212 KB Output is correct
9 Correct 1 ms 340 KB Output is correct
10 Correct 0 ms 212 KB Output is correct
11 Correct 1 ms 340 KB Output is correct
12 Correct 0 ms 340 KB Output is correct
13 Correct 9 ms 8148 KB Output is correct
14 Correct 1 ms 340 KB Output is correct
15 Correct 1 ms 340 KB Output is correct
16 Correct 10 ms 8148 KB Output is correct
17 Correct 1 ms 212 KB Output is correct
18 Correct 1 ms 212 KB Output is correct
19 Correct 1 ms 212 KB Output is correct
20 Correct 1 ms 212 KB Output is correct
21 Correct 1 ms 212 KB Output is correct
22 Correct 0 ms 212 KB Output is correct
23 Correct 0 ms 212 KB Output is correct
24 Correct 0 ms 212 KB Output is correct
25 Correct 0 ms 212 KB Output is correct
26 Correct 0 ms 212 KB Output is correct
27 Correct 1 ms 212 KB Output is correct
28 Incorrect 1 ms 212 KB Output isn't correct
29 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 212 KB Output is correct
2 Correct 0 ms 212 KB Output is correct
3 Incorrect 4 ms 2772 KB Output isn't correct
4 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 212 KB Output is correct
2 Correct 0 ms 224 KB Output is correct
3 Correct 0 ms 212 KB Output is correct
4 Correct 0 ms 212 KB Output is correct
5 Correct 0 ms 212 KB Output is correct
6 Correct 1 ms 212 KB Output is correct
7 Correct 1 ms 212 KB Output is correct
8 Correct 0 ms 212 KB Output is correct
9 Correct 1 ms 340 KB Output is correct
10 Correct 0 ms 212 KB Output is correct
11 Correct 1 ms 340 KB Output is correct
12 Correct 0 ms 340 KB Output is correct
13 Correct 9 ms 8148 KB Output is correct
14 Correct 1 ms 340 KB Output is correct
15 Correct 1 ms 340 KB Output is correct
16 Correct 10 ms 8148 KB Output is correct
17 Correct 1 ms 212 KB Output is correct
18 Correct 1 ms 212 KB Output is correct
19 Correct 1 ms 212 KB Output is correct
20 Correct 1 ms 212 KB Output is correct
21 Correct 1 ms 212 KB Output is correct
22 Correct 0 ms 212 KB Output is correct
23 Correct 0 ms 212 KB Output is correct
24 Correct 0 ms 212 KB Output is correct
25 Correct 0 ms 212 KB Output is correct
26 Correct 0 ms 212 KB Output is correct
27 Correct 1 ms 212 KB Output is correct
28 Incorrect 1 ms 212 KB Output isn't correct
29 Halted 0 ms 0 KB -