Submission #1175186

#TimeUsernameProblemLanguageResultExecution timeMemory
1175186thangdz2k7Salesman (IOI09_salesman)C++20
9 / 100
3095 ms7264 KiB
#include <bits/stdc++.h> using namespace std; const int MAX = 5e5 + 5; const int INF = 2e9 + 1; int n, u, d; struct info{ int t, l, m; info(){ t = l = m = 0; } bool operator < (const info &o) const { if (t == o.t) return l < o.l; return t < o.t; } } busi[MAX]; int dp[MAX], pref[MAX], suff[MAX]; int dist(int fr, int to){ if (fr < to) return d * (to - fr); return u * (fr - to); } void process(){ cin >> n >> u >> d >> busi[0].l; for (int i = 1; i <= n; ++ i) cin >> busi[i].t >> busi[i].l >> busi[i].m; sort(busi, busi + n + 1); dp[0] = 0; int ans = 0; for (int i = 1; i <= n; ++ i){ int j; for (j = i; j <= n && busi[i].t == busi[j].t; ++ j){ for (int k = 0; k < i; ++ k) dp[j] = max(dp[j], dp[k] + busi[j].m - dist(busi[k].l, busi[j].l)); } j --; pref[i] = dp[i]; for (int k = i + 1; k <= j; ++ k) pref[k] = max(dp[k], pref[k - 1] + busi[k].m - dist(busi[k - 1].l, busi[k].l)); suff[j] = dp[j]; for (int k = j - 1; k >= i; -- k) suff[k] = max(dp[k], suff[k + 1] + busi[k].m - dist(busi[k + 1].l, busi[k].l)); for (int k = i; k <= j; ++ k){ dp[k] = max(pref[k], suff[k]); ans = max(ans, dp[k] - dist(busi[k].l, busi[0].l)); } i = j; } cout << ans << "\n"; } int main(){ ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); process(); return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...