Pagini recente » Cod sursa (job #2486403) | Cod sursa (job #1662641) | Cod sursa (job #1072747) | Cod sursa (job #1082368) | Cod sursa (job #2479246)
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("trie.in");
ofstream fout("trie.out");
struct trie
{
int nrfii,fr;
trie *leg[26];
trie()
{
for(int i = 0 ; i < 26 ; i++)
leg[i] = 0;
nrfii = fr = 0;
}
};
trie *rad = new trie;
char s[30];
inline void Add(trie *nod,char *s)
{
if(*s == '\0')
{
nod->fr++;
return;
}
if(nod->leg[*s-'a'] == 0)
{
nod->leg[*s-'a'] = new trie;
nod->nrfii++;
}
Add(nod->leg[*s-'a'],s+1);
}
inline int Search(trie *nod, char *s)
{
if(*s == '\0')
return nod->fr;
if(nod->leg[*s-'a'] == 0)
return 0;
return Search(nod->leg[*s-'a'],s+1);
}
inline int lg(trie *nod, char *s, int len)
{
if(*s == 0 || nod->leg[*s-'a'] == 0)
return len;
return lg(nod->leg[*s-'a'],s+1,len+1);
}
inline int Delete(trie *nod, char *s)
{
if(*s == '\0')
nod->fr--;
else
if(Delete(nod->leg[*s-'a'],s+1))
{
nod->nrfii--;
nod->leg[*s-'a'] = 0;
}
if(nod->nrfii == 0 && nod->fr == 0 && nod != rad)
{
delete nod;
return true;
}
return false;
}
int main()
{
int tip , ok;
while(fin>>tip>>s)
{
if(!tip) Add(rad,s);
else if(tip == 1)
ok = Delete(rad,s);
else if(tip == 2)
fout << Search(rad,s) << "\n";
else
fout << lg(rad,s,0) << "\n";
}
return 0;
}