제출 #841985

#제출 시각아이디문제언어결과실행 시간메모리
841985Huseyn123Overtaking (IOI23_overtaking)C++17
0 / 100
1 ms6488 KiB
#include "overtaking.h" #include <bits/stdc++.h> #define MAX 1000001 #define INF LLONG_MAX #define MOD 1000000007 #define mp make_pair #define mt make_tuple #define pb push_back #define ins insert #define ff first #define ss second #define gett(x,m) get<m>(x) #define all(a) a.begin(),a.end() #define lb(a,b) lower_bound(all(a),b) #define ub(a,b) upper_bound(all(a),b) #define sortv(a) sort(all(a)) #define sorta(a,sz) sort(a,a+sz) #define inputar(a,b){\ for(int i=0;i<b;i++){\ cin >> a[i];\ }\ } #define inputvec(a,b){\ for(int i=0;i<b;i++){\ ll num;\ cin >> num;\ a.pb(num);\ }\ } #define outputar(a,b){\ for(int i=0;i<b;i++){\ cout << a[i] << " ";\ }\ cout << "\n";\ } #define outputvec(a){\ for(auto x:a){\ cout << x << " ";\ }\ cout << "\n";\ } #define reset(a,n,v){\ for(int i=0;i<n;i++){\ a[i]=v;\ }\ } using namespace std; typedef long long ll; typedef unsigned long long ull; typedef tuple<ll,ll,ll> tll; typedef pair<ll,ll> pll; typedef pair<int,int> pii; typedef double db; typedef long double ldb; int n,m,q,spd,road_len,b[1001],d[1001]; ll a[1001]; ll e[1001][1001]; vector<pll> g[1001]; ll p[1001][1001]; void init(int L, int N, std::vector<long long> T, std::vector<int> W, int X, int M, std::vector<int> S) { road_len=L; n=N; spd=X; m=M; for(int i=0;i<n;i++){ a[i]=T[i]; } // a avtobusların çıxma vaxtı üçün for(int i=0;i<n;i++){ b[i]=W[i]; } // b avtobusların sürətləri üçün for(int i=0;i<m;i++){ d[i]=S[i]; } // d stansiyalar üçün // e stansiyalara çatma vaxtı üçün // p g prefix max üçün for(int i=0;i<n;i++){ e[i][0]=a[i]; } for(int j=1;j<m;j++){ vector<pll> f; // avtobusların stansiyaya çatma vaxtına əsasən sıralayıb digər stansiyaya çatma vaxtını o(n)-ə hesablamaq üçün for(int i=0;i<n;i++){ f.pb(mp(e[i][j-1],i)); } sortv(f); g[j-1]=f; ll h=-1; // digər stansiyaya max çatma vaxtı int z=0; while(z<n){ int z1=z; while(z1<n && f[z1].ff==f[z].ff){ e[f[z1].ss][j]=max(h,f[z1].ff+b[f[z1].ss]*(d[j]-d[j-1])); z1++; } while(z<z1){ h=max(h,e[f[z].ss][j]); z++; } } } vector<pll> f; for(int i=0;i<n;i++){ f.pb(mp(e[i][m-1],i)); } sortv(f); g[m-1]=f; for(int j=0;j<m;j++){ p[0][j]=g[j][0].ff; for(int i=1;i<n;i++){ p[i][j]=max(p[i-1][j],g[j][i].ff); } } return; } long long arrival_time(long long Y) { ll x=Y; for(int j=0;j<m-1;j++){ pll p1=mp(x,-1); auto it=ub(g[j],p1); x+=(d[j+1]-d[j])*spd; if(it!=g[j].begin()){ --it; int ind=it-g[j].begin(); x=max(x,p[ind][j+1]); } } return x; }
#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...