Pagini recente » Cod sursa (job #3001384) | Cod sursa (job #1263983) | Cod sursa (job #1338460) | Cod sursa (job #2787465) | Cod sursa (job #825130)
Cod sursa(job #825130)
#include <fstream>
#include <stdlib.h>
#include <algorithm>
#include <math.h>
using namespace std;
char S[26];
struct nod { nod *a[26]; int c, f; } *R;
void cre (nod *&n)
{
n = new nod;
for (int i = 0; i < 26; i++)
n->a[i] = NULL;
n->c = n->f = NULL;
}
void ins (nod *&n, char *p)
{
if (*p == 0 || *p == '\n')
{
n->c ++;
return;
}
char c = *p - 'a';
if (n->a[c] == NULL)
{
cre (n->a[c]);
n->f ++;
}
ins (n->a[c], p+1);
}
void del (nod *&n, char *p)
{
if (*p == 0 || *p == '\n')
{
n->c --;
return;
}
char c = *p - 'a';
del (n->a[c], p+1);
if (n->a[c]->f == 0 && n->a[c]->c == 0)
{
delete n->a[c];
n->a[c] = NULL;
n->f --;
}
}
void que (nod *&n, char *p)
{
if (*p == 0 || *p == '\n')
{
printf ("%d\n", n->c);
return;
}
char c = *p - 'a';
if (n->a[c] == NULL)
{
printf ("0\n");
return;
}
que (n->a[c], p+1);
}
void pre (nod *&n, char *p)
{
char c = *p - 'a';
if (*p == '0' || *p == '\n' || n->a[c] == NULL)
printf ("%d\n", p-S-2);
else
pre (n->a[c], p+1);
}
int main ()
{
freopen ("trie.in", "r", stdin);
freopen ("trie.out", "w", stdout);
cre (R);
while (fgets (S, 25, stdin))
{
switch (S[0] - '0')
{
case 0: ins (R, S+2); break;
case 1: del (R, S+2); break;
case 2: que (R, S+2); break;
case 3: pre (R, S+2); break;
}
}
return 0;
}