Pagini recente » Cod sursa (job #2953615) | Cod sursa (job #2872476) | Cod sursa (job #2188868) | Cod sursa (job #1712213) | Cod sursa (job #2435993)
#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;
nod *q=root;
vector<pair<nod*,int>> elim;
for(;w[p];p++)
{
int c=decode(w[p]);
if(q->s[c]->pass==1)elim.push_back(make_pair(q,c));
q=q->s[c];
q->pass--;
}
q->cuvinte--;
while(elim.size())
{
int c;
tie(q,c)=elim.back();
elim.pop_back();
nod *aux=q->s[c];
q->s[c]=0;
delete aux;
}
}
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';
}