Pagini recente » Cod sursa (job #2248476) | Cod sursa (job #2595749) | Cod sursa (job #1160534) | Cod sursa (job #729985) | Cod sursa (job #730125)
Cod sursa(job #730125)
#include <fstream>
using namespace std;
ifstream f("trie.in");
ofstream g("trie.out");
struct nod
{
int aparitii,nrfii;
nod *fiu[26];
nod()
{
aparitii=nrfii=0;
for(int i=0;i<26;i++)
fiu[i]=0;
}
} *prim=new nod();
char cuvant[26];
void ins()
{
nod *p=prim;
int i=0;
while(cuvant[i]!='\0')
{
int x=cuvant[i]-'a';
if(p->fiu[x]==NULL)
{
p->fiu[x]= new nod();
p=p->fiu[x];
p->aparitii=1;
if(cuvant[i+1]==NULL) p->nrfii=1;
}
else
{
p=p->fiu[x];
p->aparitii++;
if(cuvant[i+1]==NULL) p->nrfii++;
}
i++;
}
}
void sterg()
{
nod *p=prim,*q=prim;
int i=0;
while(cuvant[i] && p)
{
int x=cuvant[i]-'a';
q=p;
p=p->fiu[x];
p->aparitii--;
if(cuvant[i+1]==NULL) p->nrfii--;
if(p->aparitii==0) q->fiu[x]=NULL;
if(q->aparitii==0 && q!=prim) delete q;
i++;
}
}
void ap()
{
int i=0;
nod *p =prim;
while(cuvant[i]&&p)
{
int x=cuvant[i]-'a';
p=p->fiu[x];
// if(p)
// g<<"0\n" ;
if(cuvant[i+1]==NULL)
g<<p->nrfii<<"\n";
i++;
}
}
void pref()
{
int i=0;
nod *p=prim;
while(cuvant[i])
{
int x=cuvant[i]-'a';
p=p->fiu[x];
if (!p)
{
g<<i<<'\n';
return ;
}
i++;
}
g<<i<<'\n';
}
int main()
{
int cod;
while(f>>cod)
{
f>>cuvant;
/*switch(cod)
{
case 0: ins(); break;
case 1: sterg(); break;
case 2: ap(); break;
case 3: pref(); break;
}*/
if(cod==0) ins();
if(cod==1) sterg();
if(cod==2) ap();
if(cod==3) pref();
}
return 0;
}