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 yiyiyi4321 at 2006-08-17 18:05:09 on Problem 2001
In Reply To:我用trie树做的,怎么WA,是不是理解错了,程序如下 Posted by:yiyiyi4321 at 2006-08-17 17:20:36
> #include <stdio.h>
> #include <stdlib.h>
> #include <string.h>
> 
> struct node1
> {
> 	char c;
> 	int isleaf;
> 	int count;
> 	struct node1 *left;
> 	struct node1 *right;
> }node[26];
> 
> int find(char t[30])
> {
> 	struct node1 *p,*p1,*p2;
> 	int i,len;
> 	len=strlen(t);
> 	p=&node[t[0]-'a'];
> 	for(i=1;i<len;i++)
> 	{
> 		p=p->left;
> 		while(1)
> 		{
> 			if(p->c==t[i])
> 			{
> 				if(p->isleaf&&i==len-1)return i;
> 				if(p->count==1)return i;
> 				break;
> 			}
> 			p=p->right;
> 		}
> 	}
> 
> }
> 
> void insert(char *t)
> {
> 	struct node1 *p,*p1,*p2;
> 	int i,len;
> 	len = strlen(t);
> 	p=&node[t[0]-'a'];
> 	p->count++;
> 	for(i=1;i<len;i++)
> 	{
> 		if(p->left==NULL)
> 		{
> 			p->left=(struct node1 *)malloc(sizeof(struct node1));
> 			p=p->left;
> 			p->c=t[i];
> 			p->right=NULL;p->left=NULL;p->isleaf=0;p->count=1;
> 			continue;
> 		}
> 		p=p->left;
> 		while(1)
> 		{
> 			if(p->c==t[i])
> 			{
> 				p->count++;
> 				break;
> 			}
> 			else if(p->right==NULL)
> 			{
> 				p->right=(struct node1 *)malloc(sizeof(struct node1));
> 				p=p->right;
> 				p->c=t[i];
> 				p->right=NULL;p->left=NULL;p->isleaf=0;p->count=1;
> 				break;
> 			}
> 			else p=p->right;
> 		}
> 	}
> 	p->isleaf=1;
> }
> 
> void init()
> {
> 	int i;
> 	for(i=0;i<26;i++)
> 	{
> 		node[i].c=i+'a';
> 		node[i].isleaf=0;
> 		node[i].count=0;
> 		node[i].left=NULL;
> 		node[i].right=NULL;
> 	}
> }
> 
> int main()
> {
> 	char s[1000][30];
> 	int i,j,k,lim=0,t;
> 	init();
> 	while(gets(s[lim]))
> 	{
>         if(strlen(s[lim])<1)break;
> 		insert(s[lim]);
> 		lim++;
> 	}
> 	for(i=0;i<lim;i++)
> 	{
> 		j = find(s[i]);
> 		printf("%s ",s[i]);
> 		for(k=0;k<=j;k++)
> 			putchar(s[i][k]);
> 		putchar('\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