Pagini recente » Cod sursa (job #2850900) | Cod sursa (job #960209) | Cod sursa (job #2556661) | Cod sursa (job #286361) | Cod sursa (job #1934213)
#include <iostream>
#include<fstream>
#include<cstring>
using namespace std;
struct nod
{
int info,nrfii;
nod *fii[26];
} *rad;
int t;
char s[21];
ifstream f("trie.in");
ofstream g("trie.out");
void adauga(char s[21],nod *r)
{
if(!s[0])
{
r->info++;
return ;
}
if(!r->fii[s[0]-'a']) {
nod* q=new nod;
q->info=0;
q->nrfii=0;
r->fii[s[0]-'a']=q;
r->nrfii++;
}
adauga(s + 1, r->fii[s[0]-'a']);
}
int sterge(char s[21],nod *r)
{
if(!s[0]) r->info--;
else if(sterge(s+1,r->fii[s[0]-'a']))
{
r->fii[s[0]-'a']=0;
r->nrfii--;
}
if(!r->info && !r->nrfii && r!=rad)
{
delete r;
return 1;
}
return 0;
}
/*
void aparitii(char s[26],nod*r)
{
int l=strlen(s);
for(int i=0; i<l && r != 0; i++)
r=r->fii[s[i]-'a'];
if(r==0)
g<<"0\n";
else
g<<r->info<<'\n';
}
*/
void prefix(char s[21], nod* r)
{
int l=strlen(s),i;
for(i=0; i<l; i++)
if(r->fii[s[i]-'a'])
r=r->fii[s[i]-'a'];
else break;
g<<i<<'\n';
}
int main()
{
rad=new nod;
rad->info=0;
rad->nrfii=0;
while(f>>t)
{
f>>s;
if(t==0) adauga(s,rad);
else if(t==1) sterge(s,rad);
else if(t==2) aparitii(s,rad);
else prefix(s,rad);
}
return 0;
}