Submission #1231662

#TimeUsernameProblemLanguageResultExecution timeMemory
1231662Ghulam_JunaidNile (IOI24_nile)C++20
67 / 100
2096 ms7872 KiB
#include <bits/stdc++.h>
#include "nile.h"
using namespace std;

#define F first
#define S second

typedef long long ll;

const int N = 1e5 + 10;
int n, q;
ll dp[N];
vector<int> w, a, b, e;
vector<ll> ans;

vector<ll> calculate_costs(vector<int> ww, vector<int> aa, vector<int> bb, vector<int> ee) {
    n = (int)ww.size(), q = (int)ee.size();
    w = ww, a = aa, b = bb, e = ee;
    ans.resize(q, 0);

    vector<pair<int, pair<int, int>>> vec;
    for (int i = 0; i < n; i ++)
        vec.push_back({w[i], {a[i], b[i]}});
    sort(vec.begin(), vec.end());
    for (int i = 0; i < n; i ++)
        w[i] = vec[i].F, a[i] = vec[i].S.F, b[i] = vec[i].S.S;

    for (int id = 0; id < q; id ++){
        int d = e[id];
        dp[0] = a[0];
        for (int i = 1; i < n; i ++){
            dp[i] = a[i] + dp[i - 1];
            if (w[i] - w[i - 1] <= d){
                ll last = 0;
                if (i > 1) last = dp[i - 2];
                dp[i] = min(dp[i], b[i] + b[i - 1] + last);
            }
            if (i > 1 and w[i] - w[i - 2] <= d){
                ll last = 0;
                if (i > 2) last = dp[i - 3];
                dp[i] = min(dp[i], (ll)b[i] + (ll)a[i - 1] + (ll)b[i - 2] + last);
            }
        }
        ans[id] = dp[n - 1];
    }
    return ans;
}
#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...