Submission #1207150

#TimeUsernameProblemLanguageResultExecution timeMemory
1207150siewjhSightseeing in Kyoto (JOI22_kyoto)C++20
100 / 100
17 ms6588 KiB
#include <bits/stdc++.h> using namespace std; typedef long long ll; typedef long double ld; ld inf = 1e18; struct line{ ll m, c; }; struct hull{ vector<line> v; ld poi(line a, line b){ return (ld)(b.c - a.c) / (a.m - b.m); } void push(line a){ while (v.size() >= 2 && poi(a, v.back()) < poi(v.back(), v[v.size() - 2])) v.pop_back(); v.push_back(a); } ld getbp(){ return (v.size() >= 2 ? poi(v.back(), v[v.size() - 2]) : -inf); } }; int main(){ ios_base::sync_with_stdio(0); cin.tie(0); int rows, cols; cin >> rows >> cols; vector<ll> rv(rows), cv(cols); for (int i = 0; i < rows; i++) cin >> rv[i]; for (int i = 0; i < cols; i++) cin >> cv[i]; hull rh, ch; for (int i = rows - 1; i >= 0; i--) rh.push({i, rv[i]}); for (int i = cols - 1; i >= 0; i--) ch.push({i, cv[i]}); ll ans = 0, r = 0, c = 0; while (r < rows - 1 || c < cols - 1){ if (rh.getbp() > ch.getbp()){ rh.v.pop_back(); ll nr = rh.v.back().m; ans += (nr - r) * cv[c]; r = nr; } else{ ch.v.pop_back(); ll nc = ch.v.back().m; ans += (nc - c) * rv[r]; c = nc; } } cout << ans; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...