제출 #113836

#제출 시각아이디문제언어결과실행 시간메모리
113836faustaadp장난감 기차 (IOI17_train)C++17
11 / 100
2047 ms51192 KiB
#include "train.h"
#include<bits/stdc++.h>
typedef long long ll;
#define pb push_back
#define mp make_pair
#define fi first
#define se second
using namespace std;
ll m,n,a[5050],b[5050],cic[5050],nx[5050],i,TC1,putar[5050],j,TC3,TC4;
bool x[5050][5050];
bool y[5050][5050];
vector<ll> v[5050];
ll cek(ll aa)
{
	if(a[aa]==1)
	{
		if(b[aa]&&cic[aa])
			return 1;
		if(nx[aa])
			return cek(aa+1);
		return 0;
	}
	else
	{
		if(b[aa]==0&&cic[aa])
			return 0;
		if(nx[aa])
			return cek(aa+1);
		return 1;
	}
}
void dfs(ll aa,ll bb)
{
//	if(putar[aa])
//		return ;
	ll ii;
	for(ii=0;ii<v[bb].size();ii++)
		if(!x[aa][v[bb][ii]])
		{
			if(v[bb][ii]==aa)
			{
				if(b[aa])
					putar[aa]=1;
		//		return ;
			}
			x[aa][v[bb][ii]]=1;
			dfs(aa,v[bb][ii]);
		}
}
void dfs2(ll aa,ll bb)
{
//	if(putar[aa])
//		return ;
	ll ii;
	for(ii=0;ii<v[bb].size();ii++)
		if(!x[aa][v[bb][ii]])
		{
			x[aa][v[bb][ii]]=1;
			dfs2(aa,v[bb][ii]);
		}
}
void dfs3(ll aa,ll bb)
{
//	if(putar[aa])
//		return ;
	if(b[aa])return ;
	ll ii;
	for(ii=0;ii<v[bb].size();ii++)
		if(!y[aa][v[bb][ii]]&!b[v[bb][ii]])
		{
			if(aa==v[bb][ii])
				putar[aa]=1;
			y[aa][v[bb][ii]]=1;
			dfs3(aa,v[bb][ii]);
		}
}
std::vector<int> who_wins(std::vector<int> A, std::vector<int> r, std::vector<int> U, std::vector<int> V) 
{
	m=U.size();
	n=A.size();
	for(i=0;i<n;i++)a[i]=A[i];
	for(i=0;i<n;i++)b[i]=r[i];
	TC1=1;
	for(i=0;i<m;i++)
	{
		if(U[i]==V[i])
			cic[U[i]]=1;
		else
		if(U[i]+1==V[i])
			nx[U[i]]=1;
		else
			TC1=0;
		v[U[i]].pb(V[i]);
		//v[V[i]].pb(U[i]);
	}
	std::vector<int> res(n);
	if(TC1&&0)
	{	
		for(int i = 0; i < n; i++)
			res[i] = cek(i);
	}
	else
	if(TC3&&0)
	{
		for(i=0;i<n;i++)
		{
			//if(b[i])
			dfs(i,i);
		}
		for(i=0;i<n;i++)
			res[i]=0;
		for(i=0;i<n;i++)
			for(j=0;j<n;j++)
				if(x[i][j]&&putar[j])
				{
					res[i]=1;
					break;
				}
	}
	else
	{
		for(i=0;i<n;i++)
		{
			//if(b[i])
			dfs2(i,i);
			dfs3(i,i);
		}
		for(i=0;i<n;i++)
			res[i]=1;
		for(i=0;i<n;i++)
			for(j=0;j<n;j++)
				if(x[i][j]&&putar[j])
				{
					res[i]=0;
					break;
				}
	}
	return res;
}

컴파일 시 표준 에러 (stderr) 메시지

train.cpp: In function 'void dfs(ll, ll)':
train.cpp:37:13: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  for(ii=0;ii<v[bb].size();ii++)
           ~~^~~~~~~~~~~~~
train.cpp: In function 'void dfs2(ll, ll)':
train.cpp:55:13: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  for(ii=0;ii<v[bb].size();ii++)
           ~~^~~~~~~~~~~~~
train.cpp: In function 'void dfs3(ll, ll)':
train.cpp:68:13: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  for(ii=0;ii<v[bb].size();ii++)
           ~~^~~~~~~~~~~~~
#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...