Pagini recente » Cod sursa (job #1297028) | Cod sursa (job #1860571) | Cod sursa (job #1107517) | Cod sursa (job #1601969) | Cod sursa (job #1138948)
#include <iostream>
#include <fstream>
#include <cstring>
#include <fstream>
#define LMAX 30
using namespace std;
ifstream f("trie.in");
ofstream g("trie.out");
struct nod
{
int fii,nr;
nod *urm[LMAX];
nod()
{
int i;
nr=fii=0;
for(i=0;i<=26;++i) urm[i]=NULL;
}
}*rad;
char c[30];
int op;
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++;
}
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_ap(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 tiparesteprefix(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)
{
if (op==0) insert(rad);
else if (op==1) Erase(rad,0);
else if (op==2) g<<tipareste_ap(rad)<<"\n";
else if (op==3) g<<tiparesteprefix(rad)<<"\n";
}
f.close();
g.close();
return 0;
}