Pagini recente » Cod sursa (job #2984318) | Cod sursa (job #1414126) | Cod sursa (job #2312152) | Cod sursa (job #536859) | Cod sursa (job #2534325)
#include<fstream>
#include<algorithm>
#include<vector>
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 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)
{
if(*s=='\0')
return poz->rasp;
if(poz->fii[*s-'a']==NULL)
return 0;
else return cauta1(poz->fii[*s-'a'],s+1);
}
///--------------------------------------------
int cauta2(Trie *poz,char *s)
{ if(*s=='\0')
return nr;
if(poz->fii[*s-'a']==NULL or poz->fii[*s-'a']->nr==0)
return nr;
nr++;
return cauta2(poz->fii[*s-'a'],s+1);
}
///--------------------------------------------
int main()
{
ifstream in("trie.in");
ofstream out("trie.out");
int q;
while(in>>q>>s){
nr = 0;
switch(q){
case 0:adauga(t,s); break;
case 1:sterge(t,s); break;
case 2:out<<cauta1(t,s)<<"\n";break;
case 3:out<<cauta2(t,s)<<"\n"; break;
}
for(int i=0;i<29;i++)
s[i]=='\0';
}
}