Submission #735777

#TimeUsernameProblemLanguageResultExecution timeMemory
735777sheldonSegway (COI19_segway)C++17
40 / 100
1072 ms1160 KiB
#include <bits/stdc++.h> using namespace std; // #pragma GCC optimize ("unroll-loops") int position[20005], speed[20005][3], charge[20005], ans[20005], boost[20005]; bool acc[20005], finished[20005]; void solve() { int n; cin >> n; for (int i = 0; i < n; ++i) { cin >> speed[i][0] >> speed[i][1] >> speed[i][2]; ans[i] = 1e9; } int m; cin >> m; for (int i = 0; i < m; ++i) { int x; cin >> x; acc[x] = 1; } for (int sec = 1; sec <= 15000; ++sec) { for (int i = 0; i < n; ++i) { if (finished[i]) continue; if (boost[i]) { --boost[i]; ++position[i]; continue; } int use = (position[i]) / 100; ++charge[i]; if (charge[i] == speed[i][use]) { ++position[i]; charge[i] = 0; } } // cout << sec << ' ' << position[0] << '\n'; vector<int> people[301]; for (int i = 0; i < n; ++i) { if (position[i] == 300) { finished[i] = 1; ans[i] = min(ans[i], sec); } people[position[i]].push_back(i); } int found = 0; for (int i = 300; i >= 1; --i) { if (acc[i]) { int cnt = 0; for (int x : people[i]) { if (charge[x]) ++cnt; } for (int x : people[i]) { if (!charge[x] && !boost[x]) { boost[x] = (found + cnt) % 20; } } } found += people[i].size(); } } for (int i = 0; i < n; ++i) { cout << ans[i] << '\n'; } } int main() { ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0); solve(); }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...