Pagini recente » Statistici Vlad Adriana (VladAdriana) | Cod sursa (job #2948239) | Cod sursa (job #1365145) | Cod sursa (job #2061891) | Cod sursa (job #1141268)
#include<fstream>
#include<vector>
using namespace std;
struct graf
{
graf *fiu[26];
int nrfii,cnt;
graf()
{
nrfii=0;cnt=0;
for(int i=0;i<=25;i++)
{
fiu[i]=0;
}
}
}*g=new graf;
char s[21];
ifstream fin("trie.in");
ofstream fout("trie.out");
void insert(char *s,graf *nod)
{
if(s[0]==0)
{
nod->cnt++;
return;
}
if(nod->fiu[s[0]-'a']==0)
{
nod->fiu[s[0]-'a']=new graf;
nod->nrfii++;
}
insert(s+1,nod->fiu[s[0]-'a']);
}
int deleteNode(char *s,graf *nod)
{
if(s[0]==0)
{
nod->cnt--;
}
else
if(deleteNode(s+1,nod->fiu[s[0]-'a'])==1)
{
nod->fiu[s[0]-'a']=0;
nod->nrfii--;
}
if(nod->nrfii==0 && nod->cnt==0 && nod!=g)
{
delete nod;
return 1;
}
return 0;
}
void find(char *s,graf *nod)
{
if(s[0]==0)
{
fout<<nod->cnt<<"\n";
return;
}
if(nod->fiu[s[0]-'a']==0)
{
fout<<0<<"\n";
return;
}
find(s+1,nod->fiu[s[0]-'a']);
}
void prefix(char *s,graf *nod,int lvl)
{
if(s[0]==0 || nod->fiu[s[0]-'a']==0)
{
fout<<lvl<<"\n";
return;
}
prefix(s+1,nod->fiu[s[0]-'a'],lvl+1);
}
int main()
{
while(!fin.eof())
{
fin.getline(s,25);
switch(s[0])
{
case '0':insert(s+2,g);
break;
case '1':deleteNode(s+2,g);
break;
case '2':find(s+2,g);
break;
case '3':prefix(s+2,g,0);
}
}
return 0;
}