字典树
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
struct T {
T * ch[26];
int n, flag;
}rt;
char in[15];
void init ( T * t ) {
for ( int i = 0; i < 26; ++ i ) t->ch[i] = NULL;
t->n = t->flag = 0;
}
void insert ( T *t, char *in ) {
if ( *in ) {
if ( t->ch[ *in - 'a' ] == NULL ) {
t->ch[ *in - 'a' ] = ( T * ) malloc ( sizeof ( T ) );
init ( t->ch[ *in - 'a' ] );
}
t->ch[ *in - 'a' ]->n ++;
insert ( t->ch[ *in - 'a' ], in + 1 );
} else {
t->flag = 1;
}
}
#include <string.h>
#include <stdlib.h>
struct T {
T * ch[26];
int n, flag;
}rt;
char in[15];
void init ( T * t ) {
for ( int i = 0; i < 26; ++ i ) t->ch[i] = NULL;
t->n = t->flag = 0;
}
void insert ( T *t, char *in ) {
if ( *in ) {
if ( t->ch[ *in - 'a' ] == NULL ) {
t->ch[ *in - 'a' ] = ( T * ) malloc ( sizeof ( T ) );
init ( t->ch[ *in - 'a' ] );
}
t->ch[ *in - 'a' ]->n ++;
insert ( t->ch[ *in - 'a' ], in + 1 );
} else {
t->flag = 1;
}
}
int find ( T *t, char *in ) {
if ( t->ch[ *in - 'a' ] != NULL ) {
if ( *( in + 1 ) == '\0' ) {
return t->ch[ *in - 'a' ]->n;
}
return find ( t->ch[ *in - 'a' ], in + 1 );
} else return 0;
}
int main ()
{
while ( gets ( in ) ) {
if ( strlen ( in ) == 0 ) break;
insert ( &rt, in );
}
while ( ~scanf ( "%s", in ) ) {
printf ( "%d\n", find ( &rt, in ) );
}
return 0;
}
if ( t->ch[ *in - 'a' ] != NULL ) {
if ( *( in + 1 ) == '\0' ) {
return t->ch[ *in - 'a' ]->n;
}
return find ( t->ch[ *in - 'a' ], in + 1 );
} else return 0;
}
int main ()
{
while ( gets ( in ) ) {
if ( strlen ( in ) == 0 ) break;
insert ( &rt, in );
}
while ( ~scanf ( "%s", in ) ) {
printf ( "%d\n", find ( &rt, in ) );
}
return 0;
}