Online JudgeProblem SetAuthorsOnline ContestsUser
Web Board
Home Page
F.A.Qs
Statistical Charts
Problems
Submit Problem
Online Status
Prob.ID:
Register
Update your info
Authors ranklist
Current Contest
Past Contests
Scheduled Contests
Award Contest
User ID:
Password:
  Register

哪一位大哥给我看看啊,有空请你们吃饭啊,,怎么验证对一提交就错啊,麻烦了,牛人们!帮帮我吧,不胜感激

Posted by hello_hello at 2010-08-21 20:17:42 on Problem 1386
#include<iostream>
#include<string.h>
#include<stdio.h>
using namespace std;
#define MAX 1001
char r[100001];
int out[MAX],in[MAX],p[MAX],exist[MAX],mark[MAX];
void build()
{
	int i;
	for(i=1;i<=26;i++)
		p[i]=i;
}
int find(int x)
{
	if(x!=p[x])
		p[x]=find(p[x]);
	return p[x];
}
void merge(int x,int y)
{
	int n,m;
	n=find(x);
	m=find(y);
	p[n]=m;
}
int main()
{
	int f,i,j,n,m,len,s,ans;
	scanf("%d",&n);
	while(n--)
	{
		memset(out,0,sizeof(out));
		memset(in,0,sizeof(in));
		memset(exist,0,sizeof(exist));
		memset(mark,0,sizeof(mark));
		scanf("%d",&m);
	    build();
		for(i=1;i<=m;i++)
		{
			scanf("%s",r);
			len=strlen(r);
			out[r[0]-96]++;
			in[r[len-1]-96]++;
			mark[r[0]-96]=1;
			mark[r[len-1]-96]=1;
			merge(r[0]-96,r[len-1]-96);
		}
	        ans=0;
		for(i=1;i<=26;i++)
		{
			s=find(i);
			if(exist[s]==0&&p[i]!=i)
			{
				exist[s]=1;
				ans++;
			}
		}
		if(ans!=1)
			printf("The door cannot be opened.\n");
       
		else
		{
                 int z,q;
	        z=0;q=0;
			ans=0;
			for(j=1;j<=26;j++)
				if(mark[j]!=0)
				{
					ans++;
					if(out[j]==in[j])
						continue;
					else if(in[j]==out[j]+1)
						z++;
					else if(out[j]==in[j]+1)
						q++;
					else
						break;
				}
			if(j>26&&((q==0&&z==0)||(z==1&&q==1)))
				printf("Ordering is possible.\n");
			else
				printf("The door cannot be opened.\n");
		}
	}
	return 0;
}





Followed by:

Post your reply here:
User ID:
Password:
Title:

Content:

Home Page   Go Back  To top


All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator