Pagini recente » Cod sursa (job #743698) | Cod sursa (job #827852) | Cod sursa (job #827871) | Cod sursa (job #3124400)
#include<iostream>
#include<fstream>
using namespace std;
ifstream f("trie.in");
ofstream g("trie.out");
struct trie
{
int rasp,nr;
trie *fii[27];
};
trie* tr = new trie();
int max1 = 0;
void adauga(trie* t, char *c)
{
t->nr++;
if(*c == '\0')
{
t -> rasp++;
return;
}
if(t -> fii[*c-'a'] == NULL)
t -> fii[*c-'a'] = new trie();
adauga(t->fii[*c-'a'],c+1);
}
void scoate(trie *t, char *c)
{
t->nr--;
if(*c == '\0')
{
t->rasp--;
return;
}
int x = *c - 'a';
scoate(t->fii[x],c+1);
}
void search1(trie *t, char *c)
{
if(*c == '\0')
{
g<<t->rasp<<"\n";
return;
}
int x = *c - 'a';
if(t->fii[x] == NULL)
{
g<<"0"<<"\n";
return;
}
search1(t->fii[x],c+1);
}
void search2(trie *t, char *c)
{
int x = *c - 'a';
if(*c == '\0' || t->fii[x] == NULL || t->fii[x]->nr == 0)
{
return;
}
max1++;
search2(t->fii[x],c+1);
}
int main()
{
int val;
char c[22];
while(f>>val>>c)
{
max1 = 0;
if(val == 0)
adauga(tr,c);
if(val == 1)
scoate(tr,c);
if(val == 2)
search1(tr,c);
if(val == 3)
{
search2(tr,c);
g<<max1<<"\n";
}
}
}