Pagini recente » Cod sursa (job #2566892) | Cod sursa (job #899960) | Cod sursa (job #1591955) | Cod sursa (job #2588226) | Cod sursa (job #1378661)
#include<iostream>
#include<fstream>
#include<cstring>
#include<algorithm>
using namespace std;
ifstream fin("trie.in");
ofstream fout("trie.out");
struct Trie
{
int pr,cv;
Trie *urm[26];
Trie()
{
pr=cv=0;
memset(urm,0,sizeof(urm));
}
};
Trie *R=new Trie();
void add(Trie *t,char *s)
{
++t->pr;
if(*s==0)
{
++t->cv;
return;
}
if(t->urm[*s-'a']==0)
t->urm[*s-'a']=new Trie();
add(t->urm[*s-'a'],s+1);
}
void sterg(Trie *t,char *s)
{
--t->pr;
if(*s==0)
{
--t->cv;
return;
}
sterg(t->urm[*s-'a'],s+1);
}
int cuvinte(Trie *t,char *s)
{
if(*s==0)
{
return t->cv;
}
if(t->urm[*s-'a']==0)return 0;
return cuvinte(t->urm[*s-'a'],s+1);
}
int pref(Trie *t,char *s)
{
if(t->pr==0)
return 0;
if(*s==0)return 1;
if(t->urm[*s-'a']==0)
return 1;
return 1+pref(t->urm[*s-'a'],s+1);
}
int main()
{
int tip;
while(fin>>tip)
{
char aux[24];
fin>>aux;
if(tip==0)
{
add(R,aux);
}
else
if(tip==1)
{
sterg(R,aux);
}
else
if(tip==2)
fout<<cuvinte(R,aux)<<'\n';
else
if(tip==3)
{
fout<<max(0,pref(R,aux)-1)<<'\n';
}
}
fin.close();
fout.close();
return 0;
}