結果
問題 | No.705 ゴミ拾い Hard |
ユーザー |
|
提出日時 | 2025-03-19 13:32:43 |
言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 314 ms / 1,500 ms |
コード長 | 876 bytes |
コンパイル時間 | 2,006 ms |
コンパイル使用メモリ | 195,524 KB |
実行使用メモリ | 19,032 KB |
最終ジャッジ日時 | 2025-03-19 13:32:54 |
合計ジャッジ時間 | 10,101 ms |
ジャッジサーバーID (参考情報) |
judge4 / judge3 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 4 |
other | AC * 40 |
ソースコード
#include <bits/stdc++.h> using namespace std; using ll = long long; ll N; vector<ll> A(400000),X(400000),Y(400000); vector<ll> DP(400000,1e18),IDX(400000); ll f(ll a,ll b){ ll x = abs(A[a] - X[b - 1]); ll y = abs(0 - Y[b - 1]); return x * x * x + y * y * y; } void check(ll a,ll b){ if(DP[a] + f(a,b) < DP[b]){ DP[b] = DP[a] + f(a,b); IDX[b] = a; } } void solve(ll l,ll r){ if(r - l == 1) return; ll m = (l + r) / 2; for(ll i = IDX[l];i <= IDX[r];i++) check(i,m); solve(l,m); for(ll i = l + 1;i <= m;i++) check(i,r); solve(m,r); } int main(){ cin >> N; for(ll i = 0;i < N;i++) cin >> A[N - 1 - i]; for(ll i = 0;i < N;i++) cin >> X[N - 1 - i]; for(ll i = 0;i < N;i++) cin >> Y[N - 1 - i]; DP[0] = 0; IDX[0] = 0; DP[N] = f(0,N); IDX[N] = 0; solve(0,N); cout << DP[N] << endl; }