Submission #318608

#TimeUsernameProblemLanguageResultExecution timeMemory
318608MetBSafety (NOI18_safety)C++14
0 / 100
282 ms262148 KiB
#include <bits/stdc++.h> #define N 2000001 using namespace std; typedef unsigned long long ull; typedef long long ll; typedef long double ld; const ll INF = 1e18, MOD = 998244353, MOD2 = 1e6 + 3; ll d[500][500*500], a[500], n, h; vector <ll> srt; int main () { cin >> n >> h; for (int i = 0; i < n; i++) { cin >> a[i]; srt.push_back (a[i]); for (int j = 1; j <= n; j++) { srt.push_back (a[i] + j * h); srt.push_back (a[i] - j * h); } } sort (srt.begin(), srt.end()); srt.erase (unique (srt.begin(), srt.end()), srt.end ()); int sz = srt.size (); for (int i = 0; i < sz; i++) { d[0][i] = abs (srt[i] - a[0]); } for (int i = 1; i < n; i++) { int l = 0, r = 0; multiset <ll> ms; for (int j = 0; j < sz; j++) { while (r < sz && srt[r] <= srt[j] + h) ms.insert (d[i-1][r++]); while (l < r && srt[l] < srt[j] - h) ms.erase (d[i-1][l++]); d[i][j] = abs (srt[j] - a[i]) + *ms.begin (); } } cout << *min_element (d[n-1], d[n-1] + sz); }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...