Pagini recente » Cod sursa (job #2528428) | Cod sursa (job #502374) | Cod sursa (job #930657) | Cod sursa (job #2716838) | Cod sursa (job #2482306)
///fara liste alocate dinamic
#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';
}
///v[i][j]:nodul i il are vecin pe j de .y ori, vecinul j
///se afla in nodul .x
///u[i]:lit din nodul i e ultima pt u[i] cuvinte.
return 0;
}