Pagini recente » Cod sursa (job #691719) | Cod sursa (job #1957095) | Rating Sarkozi Ervin Alexandru (Sh4rky29) | Cod sursa (job #1374197) | Cod sursa (job #1087175)
#include<fstream>
#include<iostream>
#include<cstring>
#define LGCUV 30
using namespace std;
ifstream f("trie.in");
ofstream g("trie.out");
int T;
struct nod
{
int nr, fii;
nod *urm[LGCUV];
nod()
{
int i;
nr=0; fii=0;
for (i=0; i<27; ++i) urm[i]=NULL;
}
}*rad;
char c[LGCUV];
int op, gata;
void Insert(nod *p)
{
int i, lit;
for (i=0; c[i]!='\0'; ++i)
{
lit=c[i]-'a';
if (p->urm[lit] == NULL)
{
p->urm[lit]=new nod();
p->fii++;
}
p=p->urm[lit];
}
p->nr++;
// cout<<T<<"\n";
}
bool Erase(nod *p, int i)
{
if (c[i]=='\0') --p->nr;
else
{
int lit=c[i]-'a';
if (Erase(p->urm[lit], i+1))
{
--p->fii;
p->urm[lit]=NULL;
}
}
if (p->fii==0 && p->nr==0 && p!=rad)
{
delete p;
return true;
}
return false;
}
int Tipareste_aparitii(nod *p)
{
int i, lit;
for (i=0; c[i]!='\0'; ++i)
{
lit=c[i]-'a';
if (p->urm[lit]==NULL) return 0;
else p=p->urm[lit];
}
return p->nr;
}
int Tipareste_prefix(nod *p)
{
int i, lit;
for (i=0; c[i]!='\0'; ++i)
{
lit=c[i]-'a';
if (p->urm[lit]==NULL) return i;
else p=p->urm[lit];
}
return strlen(c);
}
int main()
{
rad=new nod;
while (f>>op>>c)
{
++T;
if (op==0) Insert(rad);
if (op==1) Erase(rad, 0);
if (op==2) g<<Tipareste_aparitii(rad)<<"\n";
if (op==3) g<<Tipareste_prefix(rad)<<"\n";
}
f.close();
g.close();
return 0;
}