Pagini recente » Cod sursa (job #62339) | Cod sursa (job #945413) | Cod sursa (job #3214668) | Cod sursa (job #572173) | Cod sursa (job #2089382)
#include <fstream>
#include<cstring>
using namespace std;
ifstream cin ("trie.in");
ofstream cout ("trie.out");
char s[30];
int best[140000][26],date[140000],st[140000],vf,rem[140000];
int ev,poz;
void add (int nod)
{ rem[nod]++;
if(poz==strlen(s)) { date[nod]++; return;}
int val=s[poz]-'a';
if(best[nod][val]==0)
{
if(vf==0) st[++vf]=++ev;
best[nod][val]=st[vf--];
} poz++;
add(best[nod][val]);
}
void sterge (int nod)
{ rem[nod]--;
if(poz==strlen(s)) {date[nod]--; return;}
int val=s[poz]-'a'; poz++;
sterge(best[nod][val]);
if(rem[best[nod][val]]==0) st[++vf]=best[nod][val],best[nod][val]=0;
}
void write_1 (int nod)
{
if(poz==strlen(s)) { cout<<date[nod]<<"\n"; return; }
int val=s[poz]-'a'; poz++;
if(best[nod][val]>0) write_1(best[nod][val]);
else {cout<<0<<"\n"; return;}
}
void write_2 (int nod)
{
if(poz==strlen(s)) { cout<<poz<<"\n"; return; }
int val=s[poz]-'a';
if(best[nod][val]>0) poz++,write_2(best[nod][val]);
else {cout<<poz<<"\n"; return;}
}
void solve ()
{
int x;
while(cin>>x)
{
cin>>s; poz=0;
if(x==0) add(0);
else if(x==1) sterge(0);
else if(x==2) write_1(0);
else if(x==3) write_2(0);
}
}
int main()
{
solve();
cin.close();
cout.close();
return 0;
}