Pagini recente » Cod sursa (job #1430323) | Cod sursa (job #1903633) | Cod sursa (job #796433) | Cod sursa (job #2802916) | Cod sursa (job #1251568)
#include <cstdio>
FILE* in, *out;
using namespace std;
char cuv[21];
struct Nod {
int nrp, nrc;
Nod* fii[26];
Nod()
{
nrp = nrc = 0;
for(int i = 0; i < 26; i++)
fii[i] = NULL;
}
};
Nod* adauga(Nod*p,char* cuv)
{
if(p == NULL)
p = new Nod;
p->nrp++;
if(cuv[0] != 0)
p->fii[cuv[0]-'a'] = adauga(p->fii[cuv[0]-'a'],cuv+1);
else
p->nrc++;
return p;
}
Nod* sterge(Nod* p, char* cuv)
{
p->nrp--;
if(cuv[0] != 0)
p->fii[cuv[0]-'a'] = sterge(p->fii[cuv[0]-'a'], cuv+1);
else
p->nrc--;
if(p->nrc == 0)
{
delete p;
p = NULL;
}
return p;
}
int howMany(Nod *p, char* cuv)
{
int nr = 0;
if(p == NULL) return 0;
if(cuv[0] != 0)
{
nr = howMany(p->fii[cuv[0]-'a'],cuv+1);
}
else
return p->nrc;
}
int prefix(Nod *p, char* cuv)
{
if(p == NULL) return 0;
int pref = p->nrp;
if(cuv[0] != 0)
if(p->fii[cuv[0]-'a'] != NULL)
pref = 1 + prefix(p->fii[cuv[0]-'a'],cuv+1);
else return 0;
else
return 0;
}
int main()
{
in = fopen("trie.in","r");
out = fopen("trie.out","w");
Nod* p = NULL;
int type;
while(fscanf(in,"%d ", &type) != EOF)
{
fscanf(in, "%s\n", cuv);
if(type == 0)
p = adauga(p,cuv);
else if(type == 1)
p = sterge(p,cuv);
else if(type == 2)
fprintf(out, "%d\n", howMany(p,cuv));
else fprintf(out, "%d\n", prefix(p,cuv));
}
return 0;
}