PAT狼人杀简单版

网上的代码判断说谎要简洁很多,但是这个要快1ms,hhh~行吧
#include
#include

#define MAX_N 505

using namespace std;

int N;
int Word[MAX_N];

bool Is_Lie(int i,int a,int b)
{
	int aim;
	bool man;
	
	aim=abs(Word[i]);
	man=Word[i]>0?true:false;
	
	if(man&&(aim==a||aim==b)) return true;
	if(!man&&aim!=a&&aim!=b) return true;
	return false;
}

bool Is_Legal(int a,int b)
{
	bool in=false,out=false;
	
	for(int i=1;i<=N;++i)
		if(Is_Lie(i,a,b)){
			if(i==a||i==b){
				if(in) return false;
				in=true;
			}else{
				if(out) return false;
				out=true;
			}
		}
	
	if(in&&out) return true;
	return false;
}

int main()
{
	cin>>N;
	for(int i=1;i<=N;++i) cin>>Word[i];
	
	for(int i=1;i<N;++i)
	    for(int j=i+1;j<=N;++j)
	        if(Is_Legal(i,j)){
	        	cout<<i<<' '<<j<<endl;
	        	return 0;
			}
	cout<<"No Solution"<<endl;
	
	return 0;
}

你可能感兴趣的:(C)