Submission #1348170

#TimeUsernameProblemLanguageResultExecution timeMemory
1348170karelOvertaking (IOI23_overtaking)C++20
0 / 100
0 ms344 KiB
#include "overtaking.h"
#include <bits/stdc++.h>
using namespace std;

#define all(x) (x).begin(), (x).end()

typedef long long ll;
typedef pair<ll, ll> ii; // tijd, bus nummer
typedef vector<ii> vii; // tijden waarop bussen aankomen;
typedef vector<ll> vi;

ll l, d, x, m;
vector<vector<tuple<ll, ll, ll>>> am; // t maar kan gesorteerd worden
vi s;
vector<vi> tmap;

void init(int L, int N, std::vector<long long> T, std::vector<int> W, int X, int M, std::vector<int> S)
{
    l = L;
    d = L - S[M-1];
    x = X;
    m = M;
    s.insert(s.begin(), all(S));
    vector<vector<tuple<ll, ll, ll>>> arrived_map(M); // t maar kan gesorteerd worden
    vector<vi> t(M, vi(N)), e(M, vi(N)); // eigenlijke tijd (voor ieder sorteer-dinges), expected

    for(int i = 0; i < N; i++)
    {
        t[0][i] = T[i];
    }

    for(int j = 1; j < M; j++)
    {
        ll distance = (S[j] - S[j-1]);
        for(int i = 0; i < N; i++)
            e[j][i] = t[j-1][i] + W[i]*distance;
    
        for(int i = 0; i < N; i++)
            arrived_map[j-1].emplace_back(t[j-1][i], W[i], i);


        sort(all(arrived_map[j-1]));
        ll mx = 0; // niet long max maar rij-tijd
        for(auto [_, z, i]: arrived_map[j-1])
        {
            mx = max(mx, e[j][i]);
            t[j][i] = mx;
        }
    }
    for(int i = 0; i < N; i++)
        arrived_map[M-1].emplace_back(t[M-1][i], W[i], i);

    am = arrived_map;
    tmap = t;
    return;
}

long long arrival_time(long long Y)
{
    int t = Y;
    
    for(int j = 1; j < m; j++)
    {
        auto it = lower_bound(all(am[j-1]), tuple{t, 0, 0});
        if(it == am[j-1].begin())
        {
            t += x * (s[j] - s[j-1]);
            continue;
        }
        it--;
        //int i = it - am[j-1].begin() - 1;
        t = max(tmap[j][get<2>(*it)],  t + x * (s[j] - s[j-1]));
    }


    return t;
}
#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...