Pagini recente » Cod sursa (job #1999182) | Cod sursa (job #3215460) | Cod sursa (job #2829450) | Cod sursa (job #2982672) | Cod sursa (job #2384538)
#include <iostream>
#include <fstream>
#include <cstring>
using namespace std;
ifstream f("trie.in");
ofstream g("trie.out");
int operatie, l;
char cuv[25];
struct node{
int nr, nr_fii;
node *fii[26];
node(){
nr=0;
nr_fii=0;
for (int i=0; i<26; ++i)
{
fii[i]=0;
}
}
}*root;
void adaugare(node *&nod, int ind)
{
if (ind==l)
{
nod->nr++;
return;
}
if (!nod->fii[cuv[ind]-'a'])
{
nod->fii[cuv[ind]-'a']=new node();
nod->nr_fii++;
}
adaugare(nod->fii[cuv[ind]-'a'],ind+1);
//nod->nr+=nod->fii[cuv[ind]-'a']->nr;
}
int numar_aparitii(node *nod, int ind)
{
if (ind==l)
{
return nod->nr;
}
if (nod->fii[cuv[ind]-'a'])
return numar_aparitii(nod->fii[cuv[ind]-'a'],ind+1);
return 0;
}
void stergere(node *&nod, int ind)
{
if (ind==l)
{
if (nod->nr)
nod->nr--;
if (!nod->nr_fii && !nod->nr)
{
nod=0;
}
return;
}
if (nod->fii[cuv[ind]-'a'])
{
stergere(nod->fii[cuv[ind]-'a'],ind+1);
if (!nod->fii[cuv[ind]-'a'])
{
nod->nr_fii--;
delete nod->fii[cuv[ind]-'a'];
}
if (nod->nr_fii==0 && nod->nr==0)
nod=0;
}
}
int cel_mai_lung_prefix(node *nod, int ind)
{
if (ind==l)
{
return 0;
}
if (nod->fii[cuv[ind]-'a'])
{
return 1+cel_mai_lung_prefix(nod->fii[cuv[ind]-'a'],ind+1);
}
return 0;
}
int main() {
root=new node();
while (f>>operatie)
{
f >> cuv;
l=strlen(cuv);
if (operatie==0)
{
adaugare(root,0);
}
else if (operatie==2)
{
g << numar_aparitii(root,0) << '\n';
}
else if (operatie==1)
{
stergere(root,0);
}
else if (operatie==3)
{
g << cel_mai_lung_prefix(root,0) << '\n';
}
}
return 0;
}