Submission #1041460

#TimeUsernameProblemLanguageResultExecution timeMemory
1041460vjudge1Segway (COI19_segway)C++17
100 / 100
130 ms120980 KiB
#include <iostream>
#include <vector>

using namespace std;
const int N = 20000 + 10;
vector<pair<int,int>> vec[N], num[N];
int sp[N][3];
int passed[N];
int acc[N];
int finish[N];

int main(){
	int n,M;
	cin>>n;

	for (int i=1;i<=n;i++){
		for (int j : {0, 1, 2})
			cin>>sp[i][j];
		vec[sp[i][0]].push_back({i, 1});
	}
	cin>>M;
	for (int i=1, a;i<=M;i++){
		cin>>a;
		acc[a] = 1;
	}
	for (int sec=1;sec<=15000;sec++){
		for (auto [i,m] : vec[sec]){
			if (m == 300){
				finish[i] = sec;
				passed[m]++;
				continue;
			}
			if (acc[m] and passed[m] % 20 != 0){
				int k = min(300 - m, passed[m] % 20);
				vec[sec + k].push_back({i, m + k});
				for (int j=0;j<k;j++)
					num[sec + j].push_back({m + j, 0});
				continue;
			}
			vec[sec + sp[i][m / 100]].push_back({i, m + 1});
			num[sec].push_back({m, 0});
		}
		for (auto [m, zero] : num[sec])
			passed[m]++;
	}

	for (int i=1;i<=n;i++)
		cout<<finish[i]<<'\n';
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...