Submission #1216395

#TimeUsernameProblemLanguageResultExecution timeMemory
1216395ASGA_RedSeaOvertaking (IOI23_overtaking)C++20
39 / 100
3594 ms484 KiB
/**

                                    * بسم الله الرحمن الرحيم *

                ﴾ رَبِّ اشْرَحْ لِي صَدْرِي * وَيَسِّرْ لِي أَمْرِي * وَاحْلُلْ عُقْدَةً مِّن لِّسَانِي * يَفْقَهُوا قَوْلِي ﴿

*/

/// author : "ASGA"

#pragma GCC optimize("Ofast")
#include <bits/stdc++.h>

using namespace std;
using ll=long long;

#include"overtaking.h"


ll n,m,x;
vector<ll>t,w,s;



void init(int L,int N,vector<ll>T,vector<int>W,int X,int M,vector<int>S){
    n=N;m=M;t=T;x=X;
    for(auto&i:W)w.push_back(i);
    for(auto&i:S)s.push_back(i);
}

ll arrival_time(ll y){
    n++;
    t.push_back(y);
    w.push_back(x);

    vector<int>p(n);
    iota(p.begin(),p.end(),0);
    vector<ll>v=t;
    for(int i=1;i<m;i++){
        sort(p.begin(),p.end(),[&](int l,int r){return v[l]<v[r];});

        vector<ll>nv(n);

        ll mx=0;
        for(int j=0;j<n;j++){
            int k=j;
            while(k<n&&v[p[k]]==v[p[j]])k++;k--;

            for(int l=j;l<=k;l++)nv[p[l]]=max(mx,v[p[l]]+(s[i]-s[i-1])*w[p[l]]);
            for(int l=j;l<=k;l++)mx=max(mx,nv[p[l]]);

            j=k;
        }

        v=nv;

    }

    t.pop_back();
    w.pop_back();
    n--;

    return v[n];
}
#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...