字典树的一个应用,地址: http://acm.pku.edu.cn/JudgeOnline/problem?id=2001
#include  < stdio.h >
#include 
< string.h >

struct
{
    
int next[26];
    
int c[26];
    
int flag;
}
trie[ 35000 ];
int  now;

void  initt ()
{

    now 
= 0;
    
for ( int i=0; i<26; i++ )
    
{
        trie[now].next[i] 
= 0;
        trie[now].c[i] 
= 0;
    }

    trie[now].flag 
= 0;
    now 
++;
}


int  add ()
{

    
for ( int i=0; i<26; i++ )
    
{
        trie[now].next[i] 
= 0;
        trie[now].c[i] 
= 0;
    }

    trie[now].flag 
= 0;
    now 
++;

    
return now - 1;
}


int  ser (  char   * str )
{

    
int pre = 0;
    
while ( *str != 0 )
    
{
        
int addr = *str - 'a';
        
if ( ! trie[pre].next[addr] )
        
{
            
return 0;
        }

        pre 
= trie[pre].next[addr];
        str 
++;
    }

    
if ( ! trie[pre].flag )
    
{
        
return 0;
    }

    
return pre;
}

 
int  ins (  char   * str )
{

    
int pre = 0;
    
while ( *str != 0 )
    
{
        
int addr = *str - 'a';
        
if ( ! trie[pre].next[addr] )
        
{
            trie[pre].next[addr] 
= add ();
        }

        trie[pre].c[addr] 
++;
        pre 
= trie[pre].next[addr];
        str 
++;
    }

    trie[pre].flag 
= 1;

    
return pre;
}


void  check (  char   * str )
{

    
char *= str;
    
int pre = 0;
    
while ( *str != 0 )
    
{
        
int addr = *str - 'a';
        
if ( trie[pre].c[addr] == 1 )
        
{
            
while ( s <= str )
            
{
                printf ( 
"%c"*s );
                s 
++;
            }

            printf ( 
"\n" );
            
return;
        }

        pre 
= trie[pre].next[addr];
        str 
++;
    }

    printf ( 
"%s\n", s );
}


char  str[ 1005 ][ 25 ];

int  main ()
{

    
char in[25];

    
int n = 0;
    initt ();
    
while ( scanf ( "%s", in ) != EOF )
    
{
        
int len = strlen ( in );
        
if ( len )
        
{
            strcpy ( str[n
++], in );
            
if ( ! ser ( in ) )
            
{
                ins ( in );
            }

        }

    }

    
for ( int i=0; i<n; i++ )
    
{
        printf ( 
"%s ", str[i] );
        check ( str[i] );
    }

    
return 0;
}