Pagini recente » Cod sursa (job #1366212) | Cod sursa (job #1753814) | Cod sursa (job #226464) | Cod sursa (job #116660) | Cod sursa (job #634821)
Cod sursa(job #634821)
#include <stdio.h>
char S[26];
struct nod {
nod *a[26];
int nr, fii;
} *R;
void init (nod *&p)
{
p = new nod;
for (int i = 0; i < 26; i++)
p->a[i] = NULL;
p->nr = p->fii = 0;
}
void insert (nod *p, char *s)
{
if (*s == '\n')
{
p->nr ++;
return;
}
if (p->a[*s] == NULL)
{
init (p->a[*s]);
p->fii ++;
}
insert (p->a[*s], s+1);
}
void delet (nod *p, char *s)
{
if (*s == '\n')
{
p->nr --;
if (p->nr == 0 && p->fii == 0)
delete p;
return;
}
delet (p->a[*s], s+1);
if (p->nr == 0 && p->fii == 0)
delete p;
}
void aparitii (nod *p, char *s)
{
if (*s == '\n')
{
printf ("%d\n", p->nr);
return;
}
if (p == NULL)
{
printf ("0\n");
return;
}
aparitii (p->a[*s], s+1);
}
void prefix (nod *p, char *s, int k)
{
prefix (k+1);
}
int main ()
{
freopen ("trie.in", "r", stdin);
freopen ("trie.out", "w", stdout);
init (R);
fgets (S, 26, stdin);
while ( !feof(stdin) )
{
for (int i = 2; S[i] != '\n'; i++)
S[i] -= 'a';
switch (S[0])
{
case '0': insert (R, S+2); break;
case '1': delet (R, S+2); break;
case '2': aparitii (R, S+2); break;
}
fgets (S, 26, stdin);
}
return 0;
}