Pagini recente » Cod sursa (job #2164343) | Cod sursa (job #2599728) | Cod sursa (job #635936) | Cod sursa (job #2060877) | Cod sursa (job #2249757)
#include <bits/stdc++.h>
using namespace std;
ifstream f("trie.in");
ofstream g("trie.out");
struct nod
{
int tr,ap;
nod *s[26];
nod()
{
tr=0;
ap=0;
for(int i=0;i<26;i++)s[i]=NULL;
}
};
nod *rad,*nd[25];
int n,m,x[25],cod,prefix(),aparitii();
char w[25];
int main()
{
rad = new nod;
while(f>>cod)
{
f>>w;
if(cod==3){g<<prefix()<<'\n';continue;}
if(cod==2){g<<aparitii()<<'\n';continue;}
nod *q=rad;
for(m=0;w[m];m++)
{
x[m]=w[m]-'a';
nd[m]=q;
if(!q->s[x[m]])q->s[x[m]]=new nod;
q=q->s[x[m]];
}
if(cod==0)
{
for(int i=1;i<m;i++)
nd[i]->tr++;
q->tr++;
q->ap++;
continue;
}
for(int i=0;i<m;i++)
nd[i]->tr--;
q->tr--;
q->ap--;
for(int i=m-1;i>=0;i--)
{
nod *aux=nd[i]->s[x[i]];
if(aux->tr)
break;
nd[i]->s[x[i]]=NULL;
delete aux;
}
}
return 0;
}
int prefix()
{
nod *q;
int i,c=0;
for(i=0,q=rad;w[i];i++)
{
if(!q->s[w[i]-'a'])
return c;
q=q->s[w[i]-'a'];
c++;
}
return c;
}
int aparitii()
{
nod *q;
int i;
for(i=0,q=rad;w[i];i++)
{
if(!q->s[w[i]-'a'])
return 0;
q=q->s[w[i]-'a'];
}
return q->ap;
}