Pagini recente » Cod sursa (job #2553855) | Cod sursa (job #613839) | Cod sursa (job #2218335) | Cod sursa (job #2320710) | Cod sursa (job #1705563)
#include <fstream>
#include <cstring>
using namespace std;
ifstream cin("trie.in");
ofstream cout("trie.out");
struct Trie
{
int val,nrfii;
Trie *fiu[26];
Trie()
{
val=0;
nrfii=0;
for(int ind=0;ind<=25;++ind)
fiu[ind]=0;
}
};
Trie *T;
int i;
char j[21];
bool Insert_T(char *s,Trie *st)
{
if(*s==0)
{
++st->val;
return 1;
}
if(st->fiu[*s-97]==0)
{
++st->nrfii;
st->fiu[*s-97]=new Trie;
}
return Insert_T(s+1,st->fiu[*s-97]);
return 0;
}
int Delete_T(char *s,Trie *st)
{
if(*s==0)
--st->val;
else
{
if(!Delete_T(s+1,st->fiu[*s-97]))
{
st->fiu[*s-97]=0;
--st->nrfii;
}
}
if(st->val==0 && st->nrfii==0 && st!=T)
{
delete st;
return 0;
}
return 1;
}
int Find_T(char *s,Trie *st)
{
if(*s==0)
return st->val;
if(st->fiu[*s-97]==0)
return 0;
return Find_T(s+1,st->fiu[*s-97]);
return 0;
}
int Prefix_T(char *s,Trie *st,int rez)
{
if(*s==0 || st->fiu[*s-97]==0)
return rez;
return Prefix_T(s+1,st->fiu[*s-97],rez+1);
return 0;
}
int main()
{
T=new Trie;
while(cin>>i)
{
if(i==0)
{
cin.get();
cin.get(j,22);
Insert_T(j,T);
}
if(i==1)
{
cin.get();
cin.get(j,22);
Delete_T(j,T);
}
if(i==2)
{
cin.get();
cin.get(j,22);
cout<<Find_T(j,T)<<'\n';
}
if(i==3)
{
cin.get();
cin.get(j,22);
cout<<Prefix_T(j,T,0)<<'\n';
}
}
return 0;
}