Pagini recente » Cod sursa (job #373514) | redsnow_2 | Cod sursa (job #368468) | Cod sursa (job #173205) | Cod sursa (job #2258488)
#include <fstream>
#define ch (*s-'a')
using namespace std;
ifstream f("trie.in");
ofstream g("trie.out");
struct Trie
{
int pr,rasp;
Trie *fii[26];
};
Trie *t=new Trie();
int i,ma,c,rasp,nr;
char s[26];
void adauga(Trie *p,char *s)
{
p->pr++;
if(*(s+1)=='\0')
{
p->rasp++;
}
if(*s!='\0')
{
if(p->fii[ch]==NULL)
{
p->fii[ch]=new Trie();
}
adauga(p->fii[ch],s+1);
}
}
void elimina(Trie *p,char *s)
{
p->pr--;
if(*(s+1)=='\0')
{
p->rasp--;
}
if(*s!='\0')
{
elimina(p->fii[ch],s+1);
}
}
void calculeaza(Trie *p,char *s)
{
if(p->fii[ch]==NULL)
{
g<<0<<'\n';
return;
}
if(*(s+1)!='\0')
{
calculeaza(p->fii[ch],s+1);
}
else
{
g<<p->rasp<<'\n';
}
}
void cauta(Trie *p,char *s)
{
// for(i=0; i<=25; i++)
// {
// if(p->fii[i]!=NULL)
// {
// if(p->fii[i]->pr>=0)
// {
// ma=nr;
// nr++;
// }
// }
// }
// if(*s!='\0')
// {
// cauta(p->fii[ch],s+1);
// }
// else g<<ma<<'\n';
}
int main()
{
while(f>>c)
{
f.get();
f.getline(s,30);
if(c==0)
{
adauga(t,s);
}
else if(c==1)
{
elimina(t,s);
}
else if(c==2)
{
calculeaza(t,s);
}
else
{
ma=0;
cauta(t,s);
g<<'\n';
}
}
return 0;
}