Pagini recente » Cod sursa (job #755426) | Cod sursa (job #330941) | Cod sursa (job #123381) | Cod sursa (job #1070404) | Cod sursa (job #781361)
Cod sursa(job #781361)
#include <cstdio>
#include <cctype>
struct arb{
struct arb *f[26];
int p,nr; }*t;
void add(char *b){
arb * g = t;
int urm;
while( isalpha(*b) )
{
urm = *b - 'a';
if(g->f[urm] == 0)g->f[urm] = new arb;
g = g->f[urm];
g->p++;
b++;
}
g->nr++;
}
void remove(char *b){
arb * g = t;
int urm;
while( isalpha(*b) )
{
urm = *b - 'a';
g = g->f[urm];
g->p--;
b++;
}
g->nr--;
}
int aparitii(char *b){
arb * g = t;
int urm;
while( isalpha(*b) )
{
urm = *b - 'a';
if(g->f[urm] == 0)return 0;
g = g->f[urm];
b++;
}
return g->nr;
}
int prefix(char *b){
arb * g = t;
int urm, l = 0;
while( isalpha(*b) )
{
urm = *b - 'a';
if(g->f[urm] == 0)return l;
g = g->f[urm];
if(g->p < 1)return l; else
b++;
l++;
}
return l;
}
int main(){
int c;
char a[25];
freopen("trie.in","r",stdin);
freopen("trie.out","w",stdout);
t = new arb;
while( scanf("%d %s ",&c,a) != -1 )
{
switch(c)
{
case 0 : add(a); break;
case 1 : remove(a); break;
case 2 : printf("%d\n",aparitii(a)); break;
case 3 : printf("%d\n",prefix(a)); break;
}
}
return 0;
}