제출 #1302688

#제출 시각아이디문제언어결과실행 시간메모리
1302688kawhiet나일강 (IOI24_nile)C++20
67 / 100
2094 ms5796 KiB
#include <bits/stdc++.h> #include "nile.h" using namespace std; vector<long long> calculate_costs(vector<int> w, vector<int> a, vector<int> b, vector<int> e) { int n = w.size(); int q = e.size(); vector<array<int, 3>> to_sort; for (int i = 0; i < n; i++) { to_sort.push_back({w[i], a[i], b[i]}); } sort(to_sort.begin(), to_sort.end()); for (int i = 0; i < n; i++) { w[i] = to_sort[i][0]; a[i] = to_sort[i][1]; b[i] = to_sort[i][2]; } vector<long long> ret; for (auto d : e) { long long ans = accumulate(b.begin(), b.end(), 0LL); int sz = 1; vector<int> x = {0}; for (int i = 1; i < n; i++) { if (w[i] - w[i - 1] <= d) { x.push_back(i); sz++; } else { if (sz & 1) { int mn = a[x[0]] - b[x[0]]; for (int i = 2; i < sz; i += 2) { mn = min(mn, a[x[i]] - b[x[i]]); mn = min(mn, a[x[i - 2]] - b[x[i - 2]]); if (w[x[i]] - w[x[i - 2]] <= d) { mn = min(mn, a[x[i - 1]] - b[x[i - 1]]); } } ans += mn; } x = {i}; sz = 1; } } if (sz & 1) { int mn = a[x[0]] - b[x[0]]; for (int i = 2; i < sz; i += 2) { mn = min(mn, a[x[i]] - b[x[i]]); mn = min(mn, a[x[i - 2]] - b[x[i - 2]]); if (w[x[i]] - w[x[i - 2]] <= d) { mn = min(mn, a[x[i - 1]] - b[x[i - 1]]); } } ans += mn; } ret.push_back(ans); } return ret; }
#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...