Pagini recente » Cod sursa (job #2655127) | Cod sursa (job #3228184) | Cod sursa (job #1889859) | Cod sursa (job #1613171) | Cod sursa (job #1066059)
/*
Keep It Simple!
*/
#include<stdio.h>
#include<string.h>
struct node
{
int v,nr;
node *next[30];
node()
{
nr = v = 0;
memset(next,0,sizeof(next));
}
};
node *tree = new node;
void AddWord( char *s, node* crt )
{
if ( s[0] == 0 )
{
crt->v++;
return;
}
else
{
if(!crt->next[s[0]-'a'])
{
crt->next[s[0]-'a'] = new node;
crt->nr++;
}
AddWord(s+1,crt->next[s[0]-'a']);
}
}
int PrintWordsNumber( char *s, node* crt )
{
if ( s[0] == 0 )
return crt -> v;
else
{
if(!crt->next[s[0]-'a'])
return 0;
PrintWordsNumber(s+1,crt->next[s[0]-'a']);
}
}
int LongestPrefix( char *s, node* crt, int level )
{
if ( s[0] == 0 )
return level;
else
{
if(!crt->next[s[0]-'a'])
return level;
LongestPrefix(s+1,crt->next[s[0]-'a'],level+1);
}
}
void DeleteWord( char *s, node* crt)
{
if ( s[0] == 0 )
{
crt -> v--;
return;
}
else
{
if(!crt->next[s[0]-'a'])
return;
DeleteWord(s+1,crt->next[s[0]-'a']);
if(crt->next[s[0]-'a']->nr == 0 && crt->next[s[0]-'a']->v == 0)
crt->next[s[0]-'a'] = NULL;
}
}
int main()
{
FILE *f = fopen("trie.in","r");
FILE *g = fopen("trie.out","w");
int x;
char s[30];
do
{
fscanf(f,"%d %s",&x,s);
if( x == 0 )
AddWord(s,tree);
else if ( x == 2 )
fprintf(g,"%d\n",PrintWordsNumber(s,tree));
else if ( x == 3 )
fprintf(g,"%d\n",LongestPrefix(s,tree,0));
else if ( x == 1 )
DeleteWord(s,tree);
}while( !feof(f) );
return 0;
}