Pagini recente » Cod sursa (job #140706) | Cod sursa (job #477833) | Cod sursa (job #1357721) | Cod sursa (job #1961082) | Cod sursa (job #2268477)
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("trie.in");
ofstream g("trie.out");
struct Trie
{
int nr;
Trie *urm[30];
Trie()
{
nr=0;
for(int i=0;i<26;i++)
{
urm[i]=NULL;
}
}
};
Trie *Root,*nod,*p;
int op;
string s;
int pozitie(char x)
{
return x-'a';
}
void adaugare_cuvant()
{
nod=Root;
int i,litera;
nod->nr++;
for(i=0;i<s.size();i++)
{
litera=pozitie(s[i]);
if(nod->urm[litera]==NULL)
{
nod->urm[litera]=new Trie();
}
nod=nod->urm[litera];
nod->nr++;
}
}
int nr_aparitii_cuvant()
{
nod=Root;
int i,litera;
for(i=0;i<s.size();i++)
{
litera=pozitie(s[i]);
if(nod->urm[litera]==NULL)
{
return 0;
}
nod=nod->urm[litera];
}
int inplus=0;
for(i=0;i<26;i++)
{
if(nod->urm[i]!=NULL)
{
inplus=inplus+nod->urm[i]->nr;
}
}
return nod->nr-inplus;
}
int cel_mai_lung_prefix()
{
nod=Root;
int i=0,lg=0,litera;
for(i=0;i<s.size();i++)
{
litera=pozitie(s[i]);
if(nod->urm[litera]==NULL || nod->urm[litera]->nr==0)
{
return lg;
}
lg++;
nod=nod->urm[litera];
}
return lg;
}
void stergere_cuvant()
{
nod=Root;
int i,litera;
nod->nr--;
for(i=0;i<s.size();i++)
{
litera=pozitie(s[i]);
nod=nod->urm[litera];
nod->nr--;
}
}
int main()
{
Root=new Trie();
while(f>>op)
{
f>>s;
cout<<op<<" "<<s<<"\n";
if(op==0)
adaugare_cuvant();
if(op==1)
stergere_cuvant();
if(op==2)
g<<nr_aparitii_cuvant()<<"\n";
if(op==3)
g<<cel_mai_lung_prefix()<<"\n";
}
return 0;
}