제출 #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...