#include #include #include typedef struct cvor { char c; struct cvor *s[ 27 ]; } cvor; cvor *noviCvor( char c ) { cvor *novi = ( cvor * ) malloc( sizeof( cvor ) ); novi -> c = c; for( int i = 0; i < 27; i ++ ) novi -> s[ i ] = NULL; return novi; } cvor *ucitajTrie( char *fajl ) { cvor *koren = noviCvor(' '); char rec[ 20 ]; FILE *f = fopen( fajl, "r" ); while( fscanf( f, "%s", rec ) == 1 ) { cvor *pom = koren; int n = strlen( rec ); rec[ n ++ ] = 'z' + 1; for( int i = 0; i < n; i ++ ) { if( !pom -> s[ rec[ i ] - 'a' ] ) pom -> s[ rec[ i ] - 'a' ] = noviCvor( rec[ i ] ); pom = pom -> s[ rec[ i ] - 'a' ]; } } fclose( f ); return koren; } int daLiRecPostoji( cvor *koren, char *rec ) { cvor *pom = koren; int n = strlen( rec ); rec[ n ++ ] = 'z' + 1; for( int i = 0; i < n; i ++ ) if( pom -> s[ rec[ i ] - 'a' ] ) pom = pom -> s[ rec[ i ] - 'a' ]; else return 0; return 1; } int main( int argc, char **argv ) { cvor *koren = ucitajTrie( argv[ 1 ] ); char rec[ 20 ]; scanf("%s", rec ); daLiRecPostoji( koren, rec ) ? printf("DA\n") : printf("NE\n"); return 0; }