This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include <bits/stdc++.h>
#define sz(x) ((int)x.size())
#define all(x) x.begin(),x.end()
#define PB push_back
using namespace std;
const int N = 20100;
const int M = 310;
const int md = int(1e9) + 7;
const int TIM = 20000;
vector<array<int, 3> > vc;
vector<int> events[M][2];
int a[N][3], n, tim[N], m, ans[N], mem[N], fast[N], OST[N], OSS[TIM];
bool loc[M];
bool cmp(int _x, int _y){
return tim[_x] < tim[_y];
}
int main(){
ios_base::sync_with_stdio(0); cin.tie(0);
#ifdef _LOCAL
freopen("in.txt","r",stdin);
#endif // _LOCAL
cin >> n;
for (int i = 0; i < n; i++) {
cin >> a[i][0] >> a[i][1] >> a[i][2];
vc.PB({i, 0, 0});
}
for (int i = 0; i < TIM; i++)
OSS[i] = i % 100;
OST[0] = 0;
for (int i = 1; i <= n; i++)
OST[i] = i % 20;
cin >> m;
for (int i = 0; i < m; i++){
int x; cin >> x;
loc[x] = 1;
}
int tim = 0;
while (sz(vc)){
for (array<int, 3> cr : vc) {
if (cr[1] == 300)
ans[cr[0]] = tim;
else events[cr[1]][cr[2]].PB(cr[0]);
}
vc.clear();
int kol = n;
for (int i = 0; i < 300; i++)
for (int tp = 0; tp < 2; tp++){
if (sz(events[i][tp]) == 0) continue;
kol -= sz(events[i][tp]);
int ost = min(300 - i, OST[kol]);
if (tp == 0 && loc[i] && ost > 0){
for (int cr : events[i][tp]){
int speed = a[cr][0];
if (i > 99)
speed = a[cr][1];
if (i > 199)
speed = a[cr][2];
if (fast[cr] > 0){
vc.PB({cr, i + 1, 0});
mem[cr] = tim + 1;
fast[cr]--;
} else {
fast[cr] = ost - 1;
mem[cr] = tim + 1;
vc.PB({cr, i + 1, 0});
if (OSS[(i + 1)] == 0)
mem[cr] = tim + 1;
}
}
} else {
for (int cr : events[i][tp]){
int speed = a[cr][0];
if (i > 99)
speed = a[cr][1];
if (i > 199)
speed = a[cr][2];
if (fast[cr] > 0){
vc.PB({cr, i + 1, 0});
mem[cr] = tim + 1;
fast[cr]--;
} else {
if (mem[cr] % speed == (tim + 1) % speed) {
vc.PB({cr, i + 1, 0});
if (OSS[(i + 1)] == 0)
mem[cr] = tim + 1;
} else vc.PB({cr, i, 1});
}
}
}
events[i][tp].clear();
}
tim++;
}
for (int i = 0; i < n; i++)
cout << ans[i] << '\n';
return 0;
}
Compilation message (stderr)
segway.cpp: In function 'int main()':
segway.cpp:71:25: warning: variable 'speed' set but not used [-Wunused-but-set-variable]
int speed = a[cr][0];
^~~~~
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |