結果
問題 | 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;}