Submission #69957

#TimeUsernameProblemLanguageResultExecution timeMemory
69957E869120Toy Train (IOI17_train)C++14
16 / 100
1780 ms102600 KiB
#include "train.h"
#include <bits/stdc++.h>
using namespace std;

int N, M, C[100009], R[100009], U[100009], V[100009];

int subtasks(){
	int ret = 0;
	for(int i=0;i<M;i++){
		if(U[i]==V[i] || U[i]+1==V[i]) ret++;
	}
	if(ret==M) return 1;
	int c1=0,c2=0,rr=0;
	for(int i=0;i<N;i++){
		if(C[i]==1) c1++;
		if(C[i]==2) c2++;
		if(R[i]==1) rr++;
	}
	if(c2==0) return 3;
	if(c1==0) return 4;
	if(rr==1) return 5;
	return 6;
}

int p1[5009][2],dist[5009][5009];vector<int>X[5009];

void solve(){
	for(int i=0;i<M;i++)X[U[i]].push_back(V[i]);
	for(int i=0;i<N;i++){
		queue<int>Q;Q.push(i);
		while(!Q.empty()){
			int pos=Q.front();Q.pop();
			for(int j=0;j<X[pos].size();j++){
				if(dist[i][X[pos][j]]==0){
					dist[i][X[pos][j]]=1;
					Q.push(X[pos][j]);
				}
			}
		}
	}
}

vector<int> who_wins(std::vector<int> a, std::vector<int> r, std::vector<int> u, std::vector<int> v) {
	N = a.size();M=u.size();
	for(int i=0;i<N;i++){if(a[i]==1) C[i]=1;else C[i]=2; R[i]=r[i];}
	for(int i=0;i<M;i++){U[i]=u[i];V[i]=v[i];}
	
	int Subtask = subtasks();
	
	if(Subtask==1){
		for(int i=0;i<M;i++){
			if(V[i]==U[i]) p1[U[i]][0]=1;
			else p1[U[i]][1]=1;
		}
		vector<int>ans(N,0);
		for(int i=0;i<N;i++){
			for(int j=i;j<N;j++){
				if(C[j]==1 && R[j]==1 && p1[j][0]==1) {ans[i]=1;break;}
				if(C[j]==2 && R[j]==0 && p1[j][0]==1) {ans[i]=0;break;}
				if(p1[j][1]==0){
					if(R[j]==1)ans[i]=1;
					break;
				}
			}
		}
		return ans;
	}
	if(Subtask==3){
		solve();vector<int>ans(N,0);
		for(int i=0;i<N;i++){
			for(int j=0;j<N;j++){
				if((i==j || dist[i][j]==1) && dist[j][j]==1 && R[j]==1) ans[i]=1;
			}
		}
		return ans;
	}
	return vector<int>{};
}

Compilation message (stderr)

train.cpp: In function 'void solve()':
train.cpp:33:17: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
    for(int j=0;j<X[pos].size();j++){
                ~^~~~~~~~~~~~~~
#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...