Pagini recente » Monitorul de evaluare | Cod sursa (job #2615072) | Cod sursa (job #1101826) | Cod sursa (job #1048034) | Cod sursa (job #2482302)
#include <fstream>
#include <cstring>
using namespace std;
int i,n,t,nr,x,a,p,u[150005];
char c[30];
struct vct
{
int x,y;
}v[150005][27];
void add()
{
for(i=0;i<n;i++)
{
a=c[i]-'a'+1;
if(!v[p][a].y)
v[p][a].x=++t;
v[p][a].y++;
p=v[p][a].x;
}
u[p]++;
}
void del()
{
for(i=0;i<n;i++)
{
a=c[i]-'a'+1;
v[p][a].y--;
p=v[p][a].x;
}
u[p]--;
}
int qry()
{
for(i=0;i<n;i++)
{
a=c[i]-'a'+1;
p=v[p][a].x;
}
return u[p];
}
int pref()
{
for(i=0;i<n;i++)
{
a=c[i]-'a'+1;
if(v[p][a].y!=0)
nr++;
else
break ;
p=v[p][a].x;
}
return nr;
}
int main()
{
ifstream f("trie.in");
ofstream g("trie.out");
t=1;
while(f>>x)
{
f>>c;
n=strlen(c); p=1; nr=0;
if(x==0)
add();
if(x==1)
del();
if(x==2)
g<<qry()<<'\n';
if(x==3)
g<<pref()<<'\n';
}
return 0;
}