Pagini recente » Cod sursa (job #3204188) | Cod sursa (job #1550431) | Cod sursa (job #1676110) | Cod sursa (job #2487783) | Cod sursa (job #2011357)
#include <fstream>
#include<cstring>
using namespace std;
ifstream cin ("trie.in");
ofstream cout ("trie.out");
int p,frecv[200010][30],noade,number[200100],obvious[200100],nr; char s[500];
void add (int poz,int varf)
{ int h=frecv[varf][s[poz]-'a'];
if(h!=0)
{obvious[h]++;
if(poz==strlen(s)-1) {number[h]++; return;} else
add(poz+1,h);
}
else
{
noade++;
obvious[noade]++;
frecv[varf][s[poz]-'a']=noade;
if(poz==strlen(s)-1) {number[noade]++; return;} else
add(poz+1,noade);
}
}
void spulber (int poz,int varf)
{ obvious[varf]--;
if(poz==strlen(s)) number[varf]--; else
{
int h=frecv[varf][s[poz]-'a'];
spulber(poz+1,h);
}
}
void tipar (int poz,int varf)
{ if(poz==strlen(s)) cout<<number[varf]<<"\n"; else
{
int h=frecv[varf][s[poz]-'a'];
if(h==0) {cout<<0<<"\n"; return;}
tipar(poz+1,h);
}
}
void scrie (int poz,int varf)
{
int h=frecv[varf][s[poz]-'a'];
if(h==0 || obvious[h]==0 || poz==strlen(s)-1) cout<<poz<<"\n";
else scrie(poz+1,h);
}
void bla ()
{
}
void corso ()
{
while(cin>>p)
{
cin>>s; nr++;
if(nr==3095) bla();
if(p==0) add(0,0);
else if(p==1) spulber(0,0);
else if(p==2) tipar(0,0);
else if(p==3) scrie(0,0);
}
}
int main()
{
corso();
cin.close();
cout.close();
return 0;
}