Pagini recente » Cod sursa (job #728098) | Cod sursa (job #359901) | Clasament oni2011_9 | Cod sursa (job #1147485) | Cod sursa (job #2534329)
#include <iostream>
#include <fstream>
using namespace std;
ifstream si("trie.in");
ofstream so("trie.out");
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;
}
if(poz->fii[*s-'a']==NULL)
{
poz->fii[*s-'a'] = new Trie();
}
adauga(poz->fii[*s-'a'],s+1);
}
void sterge(Trie *poz, char *s)
{
poz->nr--;
if(*s=='\0')
{
poz->rasp--;
return;
}
int x=*s-'a';
sterge(poz->fii[x],s+1);
}
int cauta1(Trie *poz,char *s)
{
int x=*s-'a';
if(*s=='\0')
{
return poz->rasp;
}
if(poz->fii[*s-'a']==NULL)
{
return 0;
}
else
{
cauta1(poz->fii[x],s+1);
}
}
int cauta2(Trie *poz,char *s)
{
if(*s=='\0')
{
return nr;
}
if(poz->fii[*s-'a']==NULL || poz->fii[*s-'a']->nr == 0)
{
return nr;
}
nr++;
return cauta2(poz->fii[*s-'a'],s+1);
}
int main()
{
int op;
while(si>>op>>s)
{
nr=0;
switch(op){
case 0:adauga(t,s);break;
case 1:sterge(t,s);break;
case 2:so<<cauta1(t,s)<<'\n';break;
case 3:so<<cauta2(t,s)<<'\n';break;
}
for(int i=0;i<27;i++){
s[i]='\0';
}
}
return 0;
}