Submission #130711

#TimeUsernameProblemLanguageResultExecution timeMemory
130711user202729Toy Train (IOI17_train)C++17
0 / 100
563 ms25948 KiB
#include "train.h"
#include<algorithm>

std::vector<int> who_wins(
		std::vector<int> a_own,
		std::vector<int> recharge,
		std::vector<int> u, std::vector<int> v) {
	std::vector<std::vector<int>> ad(a_own.size());
	for(unsigned i=0;i<u.size();++i){
		ad[u[i]].push_back(v[i]);
	}
	u.clear();v.clear();

	std::vector<std::vector<char>> f(ad.size()+1,std::vector<char>(ad.size()));
	// f[k][i] = can B keep the train uncharged from node [i] in [k] steps?
	std::transform(begin(recharge),end(recharge),begin(f[0]),[](int i){
			return i==0;
			});
	for(unsigned k=1;k<f.size();++k){
		char* fk=f[k].data();
		char const* fk_=f[k-1].data();
		for(unsigned i=0;i<ad.size();++i){
			auto const next_f=[&](int j){return fk_[j];};
			if(recharge[i])
				fk[i]=false;
			else if(a_own[i])
				fk[i]=std::all_of(begin(ad[i]),end(ad[i]),next_f);
			else
				fk[i]=std::any_of(begin(ad[i]),end(ad[i]),next_f);
		}
	}

	std::vector<int> ans(ad.size());
	std::transform(begin(f.back()),end(f.back()),begin(ans),[](char x){
			return !x;
			});
	return ans;
}
#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...