Submission #1207537

#TimeUsernameProblemLanguageResultExecution timeMemory
1207537dksnfjkfnwkfwBuilding Bridges (CEOI17_building)C++20
30 / 100
19 ms3012 KiB
#include <bits/stdc++.h> using namespace std; #define sonic ios_base::sync_with_stdio(false);cin.tie(0); cout.tie(0) #define IO(main) if(fopen(main".inp","r")){freopen(main".inp","r",stdin);freopen(main".out","w",stdout);} #define pb push_back #define fi first #define se second #define mp make_pair #define ins insert #define pb push_back #define el cout << endl #define SZ(x) ((int)(x).size()) #define ALL(x) (x).begin(), (x).end() #define MASK(i) ((1LL)<<(i)) #define BIT(x,i) (((x)>>(i))&(1LL)) #define FOR(i, a, b) for(int (i)=(a);(i)<=(b); i++) #define FORD(i, a, b) for(int (i)=(a);(i)>=(b); i--) using ll = long long; using ull = unsigned long long; using ld = long double; using pii = pair<int, int>; using pll = pair<ll, ll>; using vi = vector<int>; using vii = vector<pii>; const int N = 1e6 + 9; const int mod = 1e9 + 7; const ll INF = 1e18 + 7; const int base = 31; const int LOG = 20; const ll MOD = 1e9 + 7; int mul(int x, int y) {return 1LL * x * y % mod;} int calPw(int x, int y) { int ans = 1; while(y) { if (y&1) ans = 1LL * ans * x % mod; x = 1LL * x * x % mod; y >>= 1; } return ans; } int d4x[4] = {1, 0, -1, 0}; int d4y[4] = {0, 1, 0, -1}; int dx[8] = {0, 1, 1, 1, 0, -1, -1, -1}; int dy[8] = {1, 1, 0, -1, -1, -1, 0, 1}; ///Author: Le Chi Thien Luong The Vinh high school 2008 ///code template<class X, class Y> bool minimize(X &x , Y y){ if(x > y){ x = y; return true; } return false; } template<class X, class Y> bool maximize(X &x , Y y){ if(x < y){ x = y; return true; } return false; } template<class X, class Y> bool add(X &x , Y y){ if((x + y ) >= mod){ ll tmp = x + y; x = tmp - mod; return true; } return false; } void Solve(){ } int n, h[N], w[N]; ll dp[N], pre[N]; ll get(int l, int r){ if(r < l)return 0; return pre[r] - pre[l - 1]; } void Read(){ cin >> n; FOR(i, 1, n)cin >> h[i]; FOR(i, 1, n)cin >> w[i], pre[i] = pre[i - 1] + w[i]; if(n <= 1000){ FOR(i, 1, n)dp[i]=INF; dp[1] = 0; FOR(i, 1, n){ FOR(j, i + 1, n){ dp[j] = min(dp[j], dp[i] + (h[i] - h[j]) * (h[i] - h[j]) + get(i + 1, j - 1)); } } cout << dp[n];return; } vector<pii>v; ll sum = 0; FOR(i, 2, n - 1){ sum += w[i]; v.push_back({h[i], i}); } sort(v.begin(), v.end()); ll ans = 0; FOR(i, 0, v.size() - 2){ int x = v[i].fi; int y = v[i + 1].se; int val = sum - (w[x] + w[y]); ll tmp = 0; if(v[i].se < v[i + 1].se){ tmp = (x - h[1]) * (x - h[1]) + (y - h[n])* (y - h[n]) + val; } else tmp = (y - h[1]) * (y - h[1]) + (x - h[n])* (x - h[n]) + val; ans = min(ans, tmp); } cout << ans; } int main() { sonic; int TEST = 1; // cin >> TEST; while(TEST--) { Read(); Solve(); } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...