Pagini recente » Cod sursa (job #1843685) | Cod sursa (job #1223648) | Cod sursa (job #190570) | Cod sursa (job #1489127) | Cod sursa (job #1689799)
#include <iostream>
#include<fstream>
#include<cstring>
using namespace std;
int x10,nr,i,j,i10,ok69;
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>>x10)
{
f>>w;//cout<<x10<<" "<<w<<'\n';
if(x10<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++;}
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++;
}
else
{
if(x10<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--;
p->nr--;
p=p->tata;
p->v[w[i]-'a']=NULL;
}
}
}
}
else
{
if(x10<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++;}
if(i==strlen(w))g<<p->x<<'\n';
else g<<'0'<<'\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();
return 0;
}