Submission #1095592

#TimeUsernameProblemLanguageResultExecution timeMemory
1095592abdzagOvertaking (IOI23_overtaking)C++17
39 / 100
3538 ms16280 KiB
#include "overtaking.h"
#include<bits/stdc++.h>

using namespace std;
typedef long long ll;
ll inf = 1e9;

vector<vector<ll>> init_arrival_time;
vector<ll> t, w, s;
ll l, n,x, m;
vector<vector<ll>> get_arrivial_time(){
    ll n = t.size();
    vector<vector<ll>> ans(m, vector<ll>(n));
    ans[0] = t;
    // for(auto a:ans[0])cout<<a<<" ";
    // cout<<endl;
    for(int i=1; i<m; i++){
        vector<pair<ll,ll>> vec;
        for(int j=0; j<n; j++)vec.push_back({ans[i-1][j], j});
        sort(vec.begin(), vec.end());
        ll cur_max = -inf, cur_max2 = -inf;
        for(int j=0; j<n; j++){
            ll val = vec[j].first + w[vec[j].second] * (s[i] - s[i-1]);
            if(j and vec[j-1].first == vec[j].first){
                val = max(val, cur_max2);
            }
            else {
                cur_max2 = cur_max;
                val = max(val, cur_max);
            }
            cur_max = max(val, cur_max);
            ans[i][vec[j].second] = val;
        }
        // for(auto a:ans[i])cout<<a<<" ";
        // cout<<endl;
    }
    return ans;
}

void init(int L, int N, std::vector<long long> T, std::vector<int> W, int X, int M, std::vector<int> S)
{
    t = T;
    l = L;
    n = N;
    x = X;
    m = M;
    w = vector<ll>(n);
    for(int i=0; i<n; i++)w[i] = W[i];
    s = vector<ll>(m);
    for(int i=0; i<m; i++)s[i] = S[i];
    init_arrival_time = get_arrivial_time();
    return;
}

long long arrival_time(long long Y)
{
    t.push_back(Y);
    w.push_back(x);
    auto ans = get_arrivial_time();
    ll res = ans[m-1][n];
    t.pop_back();
    w.pop_back();
    return res;
}
#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...