Pagini recente » Cod sursa (job #3203408) | Cod sursa (job #438632) | Cod sursa (job #1404079) | Cod sursa (job #3205057) | Cod sursa (job #2441258)
#include <bits/stdc++.h>
using namespace std;
ifstream f("trie.in");
ofstream g("trie.out");
struct nod
{
nod *s[26];
int pass,cuvinte;
nod()
{
pass=cuvinte=0;
for(int i=0;i<26;i++)
s[i]=NULL;
}
};
nod *root;
char w[25];
inline int decode(char ch){return (int)(ch-'a');}
void insertie(),stergere(),numara(),prefix();
int cod;
int main()
{
root=new nod;
while(f>>cod)
{
f>>w;
if(cod==0)insertie();else
if(cod==1)stergere();else
if(cod==2)numara();else
prefix();
}
return 0;
}
void insertie()
{
int p=0;
nod *q=root;
for(;w[p];p++)
{
int c=decode(w[p]);
if(!q->s[c])q->s[c]=new nod;
q=q->s[c];
q->pass++;
}
q->cuvinte++;
}
void stergere()
{
int p=0,c;
nod *q=root;
for(;w[p];p++)
{
int c=decode(w[p]);
q=q->s[c];
q->pass--;
}
q->cuvinte--;
if(q->pass)return;
p=0;q=root;
for(;w[p];p++)
{
c=decode(w[p]);
if(q->s[c]->pass==0)
break;
q=q->s[c];
}
nod *aux=q->s[c];
q->s[c]=0;
q=aux;
p++;
while(w[p])
{
c=decode(w[p]);
aux=q->s[c];
delete q;
q=aux;
p++;
}
}
void numara()
{
int p=0;
nod *q=root;
for(;w[p];p++)
{
int c=decode(w[p]);
if(!q->s[c]){g<<"0\n";return;}
q=q->s[c];
}
g<<(q->cuvinte)<<'\n';
}
void prefix()
{
int p=0,Lg=0;
nod *q=root;
for(;w[p];p++)
{
int c=decode(w[p]);
if(!q->s[c])break;
q=q->s[c];
Lg++;
}
g<<Lg<<'\n';
}