Submission #703784

#TimeUsernameProblemLanguageResultExecution timeMemory
703784piOOESightseeing in Kyoto (JOI22_kyoto)C++17
0 / 100
10 ms8148 KiB
#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 (stderr)

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) {
      |                     ~~~~~~^~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...