Pagini recente » Cod sursa (job #682533) | Cod sursa (job #1396619) | Cod sursa (job #1226452) | Cod sursa (job #3291699) | Cod sursa (job #381516)
Cod sursa(job #381516)
#include<fstream.h>
#include<iostream.h>
int L,a[25],i,t,start[30],j,tt,v[570000][28],k,l,c[25],cc[25],ind;
char s[25];
ifstream f("trie.in");
ofstream g("trie.out");
void adaug()
{
L=strlen(s);
for(i=2;i<L;i++)
a[i-1]=s[i]-96;
L-=2;
t=start[a[1]];
if(t)
{
j=1;
while(t&&j<L)
{
v[t][27]++;
tt=t;
t=v[t][a[j+1]];
if(t)
j++;
}
if(j==L)
{
v[t][0]++;
v[t][27]++;
}
else
{
for(i=j+1;i<=L;i++)
{
v[tt][a[i]]=++k;
v[tt][27]++;
tt=k;
}
v[tt][0]++;
v[tt][27]++;
}
}
else
{
start[a[1]]=++k;
for(i=2;i<=L;i++)
{
v[k][27]++;
v[k][a[i]]=++k;
}
v[k][0]++;
v[k][27]++;
}
}
void sterg()
{
L=strlen(s);
for(i=2;i<L;i++)
a[i-1]=s[i]-96;
L-=2;
t=start[a[1]];
j=1;
while(j<L)
{
if(v[t][27]>0)
v[t][27]--;
t=v[t][a[++j]];
}
v[t][0]--;
if(v[t][27]>0)
v[t][27]--;
}
void aparitii()
{
L=strlen(s);
for(i=2;i<L;i++)
a[i-1]=s[i]-96;
L-=2;
t=start[a[1]];
if(!t)
g<<"0\n";
else
{
j=1;
while(t&&j<L)
t=v[t][a[++j]];
if(t)
g<<v[t][0]<<'\n';
}
}
void prefix()
{
L=strlen(s);
for(i=2;i<L;i++)
a[i-1]=s[i]-96;
L-=2;
t=start[a[1]];
if(!t)
{
g<<"0\n";
return;
}
l=0;
j=1;
while(t&&j<L)
{
tt=t;
if(v[t][27])
l=j;
t=v[t][a[++j]];
}
g<<l<<'\n';
}
int main()
{
while(!f.eof())
{
f.getline(s,25);
if(strlen(s)>2)
if(s[0]==48)
adaug();
else
if(s[0]==49)
sterg();
else
if(s[0]==50)
aparitii();
else
prefix();
}
return 0;
}