Pagini recente » Cod sursa (job #2247106) | Cod sursa (job #1214976) | Cod sursa (job #2071091) | Cod sursa (job #1224740) | Cod sursa (job #1376989)
/*
Those without power, seek us!
Those with power, fear us!
We are the Order of the Black Knights!
*/
#include<fstream>
#include<cstdio>
#include<map>
#include<set>
#define FIT(a,b) for(vector<int >::iterator a=b.begin();a!=b.end();a++)
#define FITP(a,b) for(vector<pair<int,int> >::iterator a=b.begin();a!=b.end();a++)
#define RIT(a,b) for(vector<int>::reverse_iterator a=b.end();a!=b.begin();++a)
#include<stack>
#define ROF(a,b,c) for(int a=b;a>=c;--a)
#include<vector>
#include<algorithm>
#define FOR(a,b,c) for(int a=b;a<=c;++a)
#define REP(a,b) for(register int a=0;a<b;++a)
#include<cstring>
#include<ctime>
#include<bitset>
#include<cmath>
#include<iomanip>
#include<set>
#define f cin
#define g cout
#include<queue>
#define debug cerr<<"OK";
#define pii pair<int,int>
#define mp make_pair
#define pb push_back
#define fi first
#define se second
#define ll long long
#define ull unsigned int
#define mod 1000000009LL
#define SQR 350
#define inf 1<<30
#define div fdasfasd
#define hash dsafdsfds
#define od 100003
#define mod 1999999973LL
#define DIM 60010000
#define base 256
#define bas 255
#define N 100100
using namespace std;
ifstream f("trie.in");
ofstream g("trie.out");
/*
int dx[]={0,0,0,1,-1};
int dy[]={0,1,-1,0,0};
*/
int n,t;
char s[N];
struct Tr
{
Tr* fiu[26];
int nr,cnt;
Tr()
{
memset(fiu,0,sizeof(fiu));
nr=cnt=0;
}
};
#define T Tr*
T R=new Tr();
void insert(T &x,char *p)
{
if(!(*p))
{
x->cnt++;
x->nr++;
return ;
}
x->nr++;
if(!x->fiu[*p-'a'])
x->fiu[*p-'a']=new Tr();
insert(x->fiu[*p-'a'],p+1);
}
void del(T &x,char *p)
{
if(!(*p))
{
x->cnt--;
x->nr--;
if(!x->nr)
{
delete(x);
x=NULL;
}
return;
}
del(x->fiu[*p-'a'],p+1);
x->nr--;
if(!x->nr&&x!=R)
{
delete(x);
x=NULL;
}
}
int find(T x,char *p)
{
if(!(*p))
return x->cnt;
if(x->fiu[*p-'a'])
return find(x->fiu[*p-'a'],p+1);
return 0;
}
int pre(T x,char *p,int len)
{
if(!(*p))
return len;
if(x->fiu[*p-'a'])
return pre(x->fiu[*p-'a'],p+1,len+1);
return len;
}
int main ()
{
f>>n;
FOR(i,1,n)
{
f>>t>>s;
switch(t)
{
case 0:
insert(R,s);break;
case 1:
del(R,s);break;
case 2:
g<<find(R,s)<<"\n";break;
case 3:
g<<pre(R,s,0)<<"\n";break;
}
}
return 0;
}