Submission #1046399

#TimeUsernameProblemLanguageResultExecution timeMemory
1046399TrustfulcomicOvertaking (IOI23_overtaking)C++17
65 / 100
3561 ms33372 KiB
#include "overtaking.h" #include<bits/stdc++.h> typedef long long ll; using namespace std; struct bus{ ll t; ll exp_nt; ll real_nt; ll v; }; vector<vector<bus>> buses; ll M_glob; vector<int> s; ll x; void sort_bus(int i){ sort(buses[i].begin(), buses[i].end(), [](bus& a, bus& b){ return (a.t < b.t || (a.t == b.t && a.exp_nt < b.exp_nt)); }); } void calc_real_nts(int i){ sort_bus(i); ll last_max = -1; ll current_max = -1; for (int j = 0; j<buses[i].size(); j++){ if (j != 0 && buses[i][j].t != buses[i][j-1].t){ last_max = current_max; } current_max = max(buses[i][j].exp_nt, current_max); buses[i][j].real_nt = max(last_max, buses[i][j].exp_nt); } } void init(int L, int N, std::vector<long long> T, std::vector<int> W, int X, int M, std::vector<int> S) { buses = vector<vector<bus>>(M-1, vector<bus>(N)); M_glob = M; s = S; x = X; for (int i = 0; i<N; i++){ buses[0][i].t = T[i]; buses[0][i].v = W[i]; buses[0][i].exp_nt = T[i]+((ll)S[1])*W[i]; } for (int i = 0; i<M-1; i++){ calc_real_nts(i); if (i != M-2){ for (int j = 0; j<N; j++){ buses[i+1][j] = {buses[i][j].real_nt, buses[i][j].real_nt+(S[i+2]-S[i+1])*buses[i][j].v, -1, buses[i][j].v}; } } } return; } int bin_s(ll t, int m){ int l = 0; int r = buses[m].size()-1; while (l<r){ int mid = (l+r+1)/2; if (buses[m][mid].t >= t){ r = mid-1; } else { l = mid; } } if (buses[m][l].t >= t){ return l-1; } else { return l; } } long long arrival_time(long long Y) { ll cur_t = Y; for (int i = 0; i<M_glob-1;i++){ int j = bin_s(cur_t, i); ll my_exp_nt = cur_t+(s[i+1]-s[i])*x; if (j >= 0) cur_t = max(my_exp_nt, buses[i][j].real_nt); else cur_t = my_exp_nt; } return cur_t; }

Compilation message (stderr)

overtaking.cpp: In function 'void calc_real_nts(int)':
overtaking.cpp:29:22: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<bus>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   29 |     for (int j = 0; j<buses[i].size(); j++){
      |                     ~^~~~~~~~~~~~~~~~
#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...