Pagini recente » Cod sursa (job #793530) | Cod sursa (job #236244)
Cod sursa(job #236244)
#include<cstdio>
#include<cstring>
using namespace std;
struct NodT {
int n;
int nrf;
NodT *E[28];
NodT ()
{
n = nrf = 0;
memset( E, 0, sizeof( E ) );
}
};
NodT *T = new NodT;
int cmlpc(NodT *t, char *s, int l)
{
if (*s == '\n') return l;
if (t -> E[*s - 'a'] == 0) return l;
return cmlpc(t -> E[*s - 'a'],s + 1,l + 1);
}
int query(NodT *t, char *s)
{
char k;
if (*s == '\n') return t -> n;
k = *s - 'a';
if (t -> E[k] != 0)
return query(t -> E[k], s + 1);
else return 0;
}
int del(NodT *t, char *s)
{
char k;
if (*s == '\n') t -> n--;
else {
k = *s - 'a';
if (del(t -> E[k], s + 1))
{
t -> E[k] = 0;
t -> nrf--;
}
}
if (t -> nrf == 0 && t != T && t -> n == 0)
{
delete t;
return 1;
}
return 0;
}
int insert(NodT *t, char *s)
{
char k;
if (*s == '\n') {t -> n++; return 0;}
k = *s - 'a';
if (t -> E[k] == 0)
{
t -> E[k] = new NodT;
t -> nrf++;
}
insert(t->E[k],s+1);
}
int main()
{
char l[50];
freopen("trie.in","r",stdin);
freopen("trie.out","w",stdout);
fgets(l,32, stdin);
while (!feof(stdin))
{
if (l[0] == '0')
insert(T, l+2);
if (l[0] == '1')
del(T, l+2);
if (l[0] == '2')
printf("%d \n",query(T,l+2));
if (l[0] == '3')
printf("%d \n",cmlpc(T, l+2, 0));
fgets(l,32, stdin);
}
return 0;
}