# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
1187191 | iaraha | 나일강 (IOI24_nile) | C++20 | 0 ms | 0 KiB |
#include <bits/stdc++.h>
#pragma GCC optimize "Ofast"
using namespace std;
using ld = long double;
#define int long long
#define pf push_front
#define pof pop_front
#define pb push_back
#define pob pop_back
#define fi first
#define se second
////////////////// fresh air //////////////////
vector<int> calculate_costs(vector<int> w, vector<int> costa, vector<int> costb, deque<int> q) {
int n = w.size();
vector<int> otv;
while (!q.empty()) {
int d = q.front(), ans = 0;
q.pof();
vector<pair<int, int>> a;
bool is[n] = {};
for (int i = 0; i < n; i++) {
a.pb({w[i], i});
}
sort(a.begin(), a.end());
for (int i = 0; i < n - 1; i++) {
if (a[i + 1].fi - a[i].fi <= d) {
is[i] = is[i + 1] = 1;
}
}
int l = -1, mn = 1e9;
for (int i = 0; i < n; i++) {
int pos = a[i].se;
if (is[i]) {
if (l == -1) l = i;
if (costa[pos] - costb[pos] < mn) {
mn = costa[pos] - costb[pos];
}
ans += costb[pos];
}
else {
ans += costa[pos];
ans += (l != -1 && (i - l) % 2) * mn;
l = -1;
mn = 1e9;
}
// cout << a[i].fi << ' ' << a[i].se << ' ' << is[i] << ' ' << pos << ' ' << ans << "\n";
}
ans += (l != -1 && (n - l) % 2) * mn;
otv.pb(ans);
// cout << otv.back() << "\n";
}
return (otv);
}
signed main() {
ios_base::sync_with_stdio(0);
cin.tie(NULL); cout.tie(NULL);
int T = 1;
//cin >> T;
//cout << setprecision(8) << fixed;
while (T--) {
// calculate_costs({15, 12, 2, 10, 21}, {5, 4, 5, 6, 3}, {1, 2, 2, 3, 2}, {5, 9, 1});
}
}