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

Re:第一次用字段树,总是WA不知道哪的问题...请哪位帮忙解答下,谢谢啦!!

Posted by jxnuxiaoyong at 2010-01-15 17:24:53 on Problem 3630 and last updated at 2010-01-15 17:32:02
In Reply To:第一次用字段树,总是WA不知道哪的问题...请哪位帮忙解答下,谢谢啦!! Posted by:RomanStorm at 2009-10-17 10:26:27
感觉有点复杂,其实在 每次 Insert 的时候就可以判断是否有了
我只用了 insert 函数,没用其他的,不用 sort 

关键部分代码

void insert(Trie *head,char str[])
{
    Trie *s=head;
    Trie *t;
    int len=strlen(str);
    int i;
    for(i=0;i<len;i++)
    {
        if(s->next[str[i]-'0']==NULL)
            break;
        s=s->next[str[i]-'0'];
        if(s->flag)
            ans=1; // 代表有前缀
    }
    if( i==len )
    {
        s->flag=1;
        for(int k=0;k<10;k++)
        {
            if( s->next[k]!=NULL )
            {
                 ans=1;
                 break;
            }
        }
        return;
    }
    for(int j=i;j<len;j++)
    {
        t=&tt[pos++];//动态分配孩子 
        for(int k=0;k<10;k++)//清空 
        {
            t->next[k]=NULL;             
        }
        t->flag=0;//标记 
        s->next[str[j]-'0']=t;//以这个字母为根,展开到下一层 
        s=t;                  
    }
    s->flag=1;//以当前层结束的单词存在       
}

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