Submission #994253

#TimeUsernameProblemLanguageResultExecution timeMemory
994253vjudge1Sightseeing in Kyoto (JOI22_kyoto)C++17
0 / 100
35 ms199304 KiB
#include <bits/stdc++.h> using namespace std; using ll = long long; const int MAXN = 100'001; const int MAXM = 5001; ll dp[MAXM][MAXM], a[MAXN], b[MAXN], idxa[MAXN], idxb[MAXN], timera = 1, timerb = 1; set<ll> hva, hvb; int main() { ios::sync_with_stdio(0); cin.tie(0); int n, m; cin >> n >> m; for (int i = 1; i <= n; i++) cin >> a[i]; for (int i = 1; i <= m; i++) cin >> b[i]; for (int i = 0; i < MAXM; i++) { for (int j = 0; j < MAXM; j++) { dp[i][j] = 1e18; } } vector<int> as, bs; for (int i = 1; i <= n; i++) { if (!hva.count(a[i]) || i == n) { hva.insert(a[i]); as.emplace_back(i); } } for (int i = 1; i <= m; i++) { if (!hvb.count(b[i]) || i == m) { hvb.insert(b[i]); bs.emplace_back(i); } } hva.clear(); hvb.clear(); for (int i = n; i >= 1; i--) { if (!hva.count(a[i]) && i != n) { hva.insert(a[i]); as.emplace_back(i); } } for (int i = m; i >= 1; i--) { if (!hvb.count(b[i]) && i != m) { hvb.insert(b[i]); bs.emplace_back(i); } } sort(as.begin(), as.end()); sort(bs.begin(), bs.end()); as.erase(unique(as.begin(), as.end()), as.end()); bs.erase(unique(bs.begin(), bs.end()), bs.end()); for (int i : as) { idxa[timera++] = i; } for (int i : bs) { idxb[timerb++] = i; } dp[1][1] = 0; for (int i = 1; i < timera; i++) { for (int j = 1; j < timerb; j++) { dp[i][j+1] = min(dp[i][j+1], dp[i][j] + a[i] * (idxb[j+1] - idxb[j])); dp[i+1][j] = min(dp[i+1][j], dp[i][j] + b[j] * (idxa[i+1] - idxa[i])); } } cout << dp[timera-1][timerb-1] << "\n"; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...