제출 #1235104

#제출 시각아이디문제언어결과실행 시간메모리
1235104ricardsjansonsNile (IOI24_nile)C++20
67 / 100
2095 ms6556 KiB
#include "nile.h"
#include <bits/stdc++.h>
#define ll long long
using namespace std;

int n;
vector<int>w,a,b,c;

ll f(int d){
    ll res=0;
    for(int i=0,j=0;i<n;i=++j){
        res+=b[i];
        while(j+1<n&&w[j+1]-w[j]<=d){
            res+=b[++j];
        }
        if((j-i)%2){
            continue;
        }
        int best=i;
        for(int k=i;k<=j;k++){
            if((k-i)%2==0||w[k+1]-w[k-1]<=d){
                if(c[k]<c[best]){
                    best=k;
                }
            }
        }
        res+=c[best];
    }
    return res;
}

vector<ll> calculate_costs(vector<int>W,vector<int>A,vector<int>B,vector<int>E) {
    n=A.size();
    vector<tuple<int,int,int>>arts(n);
    for(int i=0;i<n;i++){
        arts[i]={W[i],A[i],B[i]};
    }
    sort(arts.begin(),arts.end());
    w.resize(n);
    a.resize(n);
    b.resize(n);
    c.resize(n);
    for(int i=0;i<n;i++){
        tie(w[i],a[i],b[i])=arts[i];
        c[i]=a[i]-b[i];
    }
    vector<ll>r;
    for(int d:E){
        r.push_back(f(d));
    }
    return r;
}
#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...