Pagini recente » Cod sursa (job #2044656) | Cod sursa (job #2521855) | Cod sursa (job #395576) | Diferente pentru implica-te/arhiva-educationala intre reviziile 72 si 71 | Cod sursa (job #1700769)
#include <iostream>
#include<fstream>
#include<cstring>
using namespace std;
int x10,nr,i,j,i10,ok69,i1000,h;
char w[20];
struct trie
{
int x,nr;
trie *tata;
trie *v[26];
trie()
{
for(i1000=0;i1000<26;++i1000)v[i1000]=NULL;
}
}*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;h=strlen(w);
while(p->v[w[i]-'a']!=NULL&&i<h){p=p->v[w[i]-'a'];i++;}
for(j=i;j<h;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;h=strlen(w);
while(i<h){p=p->v[w[i]-'a'];i++;}
if(p->x>1)p->x--;
else
{
ok69=0;
for(i10=0;i10<26&&ok69<1;++i10)if(p->v[i10]!=NULL)ok69=1;
p->x--;
if(ok69<1)
{
//p->x--;
while(p->nr<2&&p->x<1&&p->tata!=NULL)
{
i--;
p->nr--;p1=new trie;
p1=p;
p=p->tata;
p->v[w[i]-'a']=NULL;
delete p1;
}
}
}
}
else
{
if(x10<3)
{
p=new trie;
p=vf;i=0;h=strlen(w);
while(p->v[w[i]-'a']!=NULL&&i<h){p=p->v[w[i]-'a'];i++;}
if(i==h)g<<p->x<<'\n';
else g<<'0'<<'\n';
}
else
{
p=new trie;
p=vf;i=0;h=strlen(w);
while(p->v[w[i]-'a']!=NULL&&i<h){p=p->v[w[i]-'a'];i++;}
g<<i<<'\n';
}
}
}
}
f.close();g.close();
return 0;
}