Pagini recente » Cod sursa (job #861948) | Cod sursa (job #330675) | Cod sursa (job #1445958) | Cod sursa (job #1002491) | Cod sursa (job #1632369)
#include <iostream>
#include<fstream>
#include<cstring>
using namespace std;
int x,nr,i,j;
char w[20];
struct trie
{
int x,nr;
trie *tata;
trie *v[26];
}*vf,*p,*a,*p1;
int main()
{
ifstream f("trie.in");
for(i=0;i<26;i++)
{
a=new trie;
a->v[i]=NULL;
}
vf=new trie;
vf=a;vf->x=0;
vf->tata=NULL;
ofstream g("trie.out");
while(f>>x)
{
f>>w;
if(x<1)
{
p=new trie;
p=vf;i=0;
while(p->v[w[i]-'a']!=NULL&&i<strlen(w)){p=p->v[w[i]-'a'];i++;}
//cout<<i<<" ";
for(j=i;j<strlen(w);j++){p->nr++;p->v[w[j]-'a']=new trie;p->v[w[j]-'a']->tata=p;p->v[w[j]-'a']->x=0;p=p->v[w[j]-'a'];}
p->x++;//cout<<p->x<<" ";
//delete p;
}
else
{
if(x<2)
{
p=new trie;
p=vf;i=0;
while(i<strlen(w)){p=p->v[w[i]-'a'];i++;}
if(p->x>1)p->x--;
else
{
p->x--;
while(p->nr<2&&p->x<1&&p->tata!=NULL)
{
i--;
p->nr--;//cout<<w[i];
p=p->tata;
p->v[w[i]-'a']=NULL;
}
}
}
else
{
if(x<3)
{
p=new trie;
p=vf;i=0;
while(p->v[w[i]-'a']!=NULL&&i<strlen(w)){p=p->v[w[i]-'a'];i++;}
g<<p->x<<'\n';
}
else
{
p=new trie;
p=vf;i=0;
while(p->v[w[i]-'a']!=NULL&&i<strlen(w)){p=p->v[w[i]-'a'];i++;}
g<<i<<'\n';
}
}
}
}
f.close();g.close();
/*x=0;
for(i=0;i<26;i++){if(vf->v[i]!=NULL){x++;cout<<(char)(i+'a')<<" ";}}
cout<<'\n'<<x;*/
return 0;
}