Pagini recente » Cod sursa (job #2966053) | Cod sursa (job #2649488) | Cod sursa (job #2954843) | Cod sursa (job #2273443) | Cod sursa (job #2529414)
#include <iostream>
#include <fstream>
using namespace std;
int nr;
char s[27];
struct trie
{
int nr,rasp;
trie *fii[27];
};
trie *t=new trie();
//--------------------------------------------------
void adauga(trie *poz, char *s)
{
poz->nr++;
if(*s=='\0')
{
poz->rasp++;
return;
}
int x=*s-'a';
if(poz->fii[x]==NULL)
{
poz->fii[x]=new trie();
}
adauga(poz->fii[x],s+1);
}
//--------------------------------------------------
void scoate(trie *poz, char *s)
{
poz->nr--;
if(*s=='\0')
{
poz->rasp--;
return;
}
int x=*s-'a';
scoate(poz->fii[x],s+1);
}
//--------------------------------------------------
int cauta1(trie *poz, char *s)
{
if(*s=='\0') return poz->rasp;
int x=*s-'a';
if(poz->fii[x]==NULL)
{
return 0;
}
else return cauta1(poz->fii[x],s+1);
}
//--------------------------------------------------
int cauta2(trie *poz, char *s)
{
if(*s=='\0') return nr;
int x=*s-'a';
if(poz->fii[x]==NULL || poz->fii[x]->nr==0)
{
return nr;
}
else
{
nr++;
} return cauta2(poz->fii[x],s+1);
}
//--------------------------------------------------
int main() {
ifstream f("trie.in");
ofstream g("trie.out");
int op;
while(f>>op>>s)
{
if(op==0)
adauga(t, s);
else if(op==1) scoate(t, s);
else if(op==2) g<<cauta1(t,s)<<"\n";
else
{
nr=0;
g<<cauta2(t,s)<<"\n";
}
for(int i=1;i<=26;i++) s[i]='\0';
}
}