Submission #1049165

#TimeUsernameProblemLanguageResultExecution timeMemory
1049165IUA_HasinOvertaking (IOI23_overtaking)C++17
39 / 100
3552 ms16220 KiB
#include "overtaking.h"
#include <bits/stdc++.h>

#define ll              long long

using namespace std;

const int A = 1e3+10;

ll l, n, x, m;
vector<ll> t, w, s;
ll arr[A][A], brr[A][A];

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;
    n = N;
    x = X;
    m = M;

    for(int i=0; i<n; i++){
        ll a = T[i];
        ll b = W[i];
        t.push_back(a);
        w.push_back(b);
    }
    for(int i=0; i<m; i++){
        ll a = S[i];
        s.push_back(a);
    }




    return;
}

long long arrival_time(long long Y)
{
    for(int i=0; i<n+1; i++){
        for(int j=0; j<m; j++){
            arr[i][j] = 0;
            brr[i][j] = 0;
        }
    }

    for(int i=0; i<n; i++){
        arr[i][0] = t[i];
        //cout << arr[i][0] << " ";
    }
    //cout << 51 << endl;
    arr[n][0] = Y;

    for(int i=1; i<m; i++){
        vector<tuple<ll, ll, ll>> v;
        for(int j=0; j<n+1; j++){
            if(j==n){
                brr[j][i] = arr[j][i-1] + x*(s[i]-s[i-1]);
                v.push_back({arr[j][i-1], brr[j][i], j});
            } else {
                brr[j][i] = arr[j][i-1] + w[j]*(s[i]-s[i-1]);
                v.push_back({arr[j][i-1], brr[j][i], j});
            }            
        }
        sort(v.begin(), v.end());
        tuple<ll, ll, ll> f = v[0];
        ll curr = get<1>(f);

        // for(int j = 0; j<n+1; j++){
        //     cout << brr[j][i] << " ";
        // }
        // cout << 67 << endl;
        // for(int j = 0; j<n+1; j++){
        //     tuple<ll, ll, ll> temp = v[j];
        //     cout << get<0> (temp) << " " << get<1>(temp) << " " << get<2> (temp) << endl;
        // }
        // cout << 72 << endl;

        for(int j=0; j<n+1; j++){
            tuple<ll, ll, ll> temp = v[j];
            ll aaa = get<2>(temp);
            ll temp2 = get<1>(temp);
            ll ans = max(curr, temp2);
            curr = ans;
            arr[aaa][i] = ans;
        }

        // for(int j = 0; j<n+1; j++){
        //     cout << arr[j][i] << " ";
        // }
        // cout << 84 << endl;
    }   

    ll ans = arr[n][m-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...