Cod sursa(job #1704123)
Utilizator | Data | 18 mai 2016 08:31:27 | |
---|---|---|---|
Problema | Trie | Scor | 65 |
Compilator | cpp | Status | done |
Runda | Arhiva educationala | Marime | 2.73 kb |
#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;
}