Pagini recente » Cod sursa (job #2904912) | Cod sursa (job #2573479) | Cod sursa (job #683683) | Cod sursa (job #1295334) | Cod sursa (job #1689715)
#include <iostream>
#include<fstream>
#include<cstring>
using namespace std;
int x,nr,i,j,i10,ok69;
//int k69;
char w[20];
struct trie
{
int x,nr;
trie *tata;
trie *v[26];
}*vf,*p,*a,*p1,*p200;
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
{
ok69=0;
for(i10=0;i10<27;++i10)if(p->v[i10]!=NULL)ok69=1;
if(ok69<1)
{
p->x--;
while(p->nr<2&&p->x<1&&p->tata!=NULL)
{
i--;p200=p;
p->nr--;//cout<<w[i];
p=p->tata;
p->v[w[i]-'a']=NULL;
delete p200;
}
}
}
}
else
{
if(x<3)
{
//k69++;
p=new trie;
p=vf;i=0;
while(p->v[w[i]-'a']!=NULL&&i<strlen(w)){p=p->v[w[i]-'a'];i++;}
if(i==strlen(w))g<<p->x<<'\n';
else g<<'0'<<'\n';
/*if(k69==17)
{
cout<<w<<'\n'<<strlen(w)<<" "<<i;
}*/
}
else
{
//k69++;
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;
}