이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef struct{
ll time;
ll skm;
float idx;
int id;
} zadu;
ll N, M, L, X;
vector<ll> T, W , S;
const int sizex = 1e3+5;
vector<zadu> kotokisu[sizex];
ll dp[sizex][sizex];
bool compareByAge(zadu p1, zadu p2)
{
if(p1.time < p2.time) return 1;
else if(p1.time == p2.time){
if(p1.skm < p2.skm) return 1;
else if(p1.skm == p2.skm){
if(p1.idx < p2.idx) return 1;
else return 0;
}
else return 0;
}
else return 0;
}
void init(int l, int n, std::vector<long long> t, std::vector<int> w, int x, int m, std::vector<int> s){
N = n, M = m, L = l, X = x;
for(auto x: t) T.push_back(x);
for(auto x: w) W.push_back(x);
for(auto x: s) S.push_back(x);
vector<zadu> v;
for(int i = 0; i<n; i++){
zadu alz;
alz.time = t[i];
alz.skm = w[i];
alz.id = i;
alz.idx = i;
v.push_back(alz);
}
sort(v.begin(), v.end(), compareByAge);
for(int i = 1; i<m; i++){
for(int j = 0; j<n; j++){
kotokisu[i-1].push_back(v[j]);
dp[v[j].id][i-1] = v[j].time;
}
ll z = 0;
for(int j =0; j<=n; j++){
v[j].time = max(z, v[j].time + v[j].skm * (s[i] - s[i-1]));
z = v[j].time;
}
sort(v.begin(), v.end(), compareByAge);
for(int j = 0; j<=n; j++){
v[j].idx = j;
}
}
for(int j = 0; j<n; j++){
kotokisu[m-1].push_back(v[j]);
dp[v[j].id][m-1] = v[j].time;
}
return;
}
long long arrival_time(long long Y){
float NN = N - 0.5;
zadu alz = {Y, X, NN, N};
for(int i = 0; i<M-1; i++){
int hi = N, lo = -1;
while(hi - lo>1){
int mid = (hi + lo)/2;
if(compareByAge(alz, kotokisu[i][mid])) hi = mid;
else lo = mid;
//cout<<hi<<" "<<mid<<"\n";
}
//cout<<lo<<" "<<alz.time<<" ";
alz.idx = lo+ 0.5;
if(lo == -1){
alz.time = alz.time + X*(S[i+1] - S[i]);
}
else{
int j = kotokisu[i][lo].id;
//cout<<dp[i-1][j]<<" ";
alz.time = max(alz.time + X*(S[i+1] - S[i]), dp[j][i+1]);
}
//cout<<alz.time<<"\n";
}
return alz.time;
}
컴파일 시 표준 에러 (stderr) 메시지
overtaking.cpp: In function 'long long int arrival_time(long long int)':
overtaking.cpp:80:27: warning: narrowing conversion of 'N' from 'll' {aka 'long long int'} to 'int' [-Wnarrowing]
80 | zadu alz = {Y, X, NN, N};
| ^
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |