結果
| 問題 | No.3417 Tired Santa |
| コンテスト | |
| ユーザー |
applejam
|
| 提出日時 | 2025-12-24 11:14:47 |
| 言語 | C++23 (gcc 13.3.0 + boost 1.89.0) |
| 結果 |
AC
|
| 実行時間 | 101 ms / 2,000 ms |
| コード長 | 2,071 bytes |
| 記録 | |
| コンパイル時間 | 6,139 ms |
| コンパイル使用メモリ | 335,684 KB |
| 実行使用メモリ | 58,496 KB |
| 最終ジャッジ日時 | 2025-12-24 11:14:55 |
| 合計ジャッジ時間 | 8,189 ms |
|
ジャッジサーバーID (参考情報) |
judge5 / judge2 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 25 |
ソースコード
#include <bits/stdc++.h>
#include <atcoder/all>
using namespace std;
using namespace atcoder;
using ll = long long;
using mint = modint998244353;
using vi = vector<int>;
using vvi = vector<vi>;
using vvvi = vector<vvi>;
using vll = vector<ll>;
using vvll = vector<vll>;
using vvvll = vector<vvll>;
using vmi = vector<mint>;
using vvmi = vector<vmi>;
using vvvmi = vector<vvmi>;
#define all(a) (a).begin(), (a).end()
#define rep2(i, m, n) for (int i = (m); i < (n); ++i)
#define rep(i, n) rep2(i, 0, n)
#define drep2(i, m, n) for (int i = (m)-1; i >= (n); --i)
#define drep(i, n) drep2(i, n, 0)
using p = pair<ll, ll>;
int main(){
ios::sync_with_stdio(false);
cin.tie(nullptr);
int n; ll s; cin >> n >> s;
vll x(n+1, s), w(n+1, 0);
rep(i, n)cin >> x[i+1]; rep(i, n)cin >> w[i+1];
vector<p> vp = {{s, 0}};
rep(i, n)vp.push_back({x[i+1], i+1});
sort(all(vp));
int a = 0;
while(vp[a].first < s)a++;
vll sum(n+2, 0); rep(i, n+1)sum[i+1] = sum[i] + w[vp[i].second];
vvvll dp(n+1, vvll(n+1, vll(2, 1e18)));
dp[a][a][0] = dp[a][a][1] = 0;
rep2(k, 1, n+1){
rep(j, k+1){
int l = a-j, r = a + k - j;
if(l < 0 || r < 0 || r > n)continue;
ll tmp1 = sum[n+1] - (sum[r] - sum[l]), tmp2 = sum[n+1] - (sum[r+1] - sum[l+1]);
ll tmp3 = sum[n+1] - (sum[r+1] - sum[l]);
ll d1 = x[vp[l+1].second] - x[vp[l].second], d2 = x[vp[r].second] - x[vp[r-1].second];
ll d3 = x[vp[r].second] - x[vp[l+1].second], d4 = x[vp[r-1].second] - x[vp[l].second];
ll d5 = x[vp[r].second] - x[vp[l].second];
dp[l][r][0] = min({dp[l+1][r][0]+d1*tmp2 , dp[l+1][r][1] + (d1+d3)*tmp2,
dp[l][r-1][0] + (d4+d2)*tmp1 + d5*tmp3, dp[l][r-1][1] + d2*tmp1 + d5*tmp3});
dp[l][r][1] = min({dp[l+1][r][0] +d1*tmp2 + d5*tmp3, dp[l+1][r][1] + (d1+d3)*tmp2 + d5*tmp3,
dp[l][r-1][0] + (d2+d4)*tmp1, dp[l][r-1][1] + d2*tmp1});
}
}cout << min(dp[0][n][0], dp[0][n][1]) << endl;
return 0;
}
applejam