Pagini recente » Cod sursa (job #2023871) | Cod sursa (job #2486770) | Cod sursa (job #196212) | Cod sursa (job #1287048) | Cod sursa (job #2152057)
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin ("trie.in");
ofstream fout ("trie.out");
struct nod {
int nr=0, nrfii=0;
nod *fii[26] = {0};
};
nod *T;
void adauga (char *cuv, nod *T)
{
if (cuv[0]==0)
{
T->nr++;
return;
}
else
{
if (T->fii[cuv[0]-'a'] == 0)
{
T->nrfii++;
T->fii[cuv[0]-'a'] = new nod;
}
adauga (cuv+1, T->fii[cuv[0]-'a']);
}
}
void sterge (char *cuv, nod *T)
{
if (cuv[0]==0)
{
T->nr--;
return;
}
sterge (cuv+1, T->fii[cuv[0]-'a']);
if (T->fii[cuv[0]-'a']->nrfii==0 && T->fii[cuv[0]-'a']->nr==0)
{
delete T->fii[cuv[0]-'a'];
T->fii[cuv[0]-'a']=0;
T->nrfii--;
}
}
int nrAp (char *cuv, nod *T)
{
if (cuv[0]==0) return T->nr;
if (T->fii[cuv[0]-'a'] == 0) return 0;
nrAp (cuv+1, T->fii[cuv[0]-'a']);
}
int prefMax (char *cuv, nod *T)
{
if (cuv[0]==0) return 1;
if (T->fii[cuv[0]-'a'] == 0) return 0;
return prefMax (cuv+1, T->fii[cuv[0]-'a']) + 1;
}
int main()
{
int tip;
char cuv[25];
T = new nod;
while (fin>>tip)
{
fin>>cuv;
if (tip==0) adauga (cuv, T);
if (tip==1) sterge (cuv, T);
if (tip==2) fout << nrAp (cuv, T) << '\n';
if (tip==3) fout << prefMax (cuv, T) << '\n';
}
fout.close();
return 0;
}