Pagini recente » Cod sursa (job #356177) | Cod sursa (job #2882094) | Cod sursa (job #3206137) | Borderou de evaluare (job #1137029) | Cod sursa (job #2089379)
#include <fstream>
#include<cstring>
using namespace std;
ifstream cin ("trie.in");
ofstream cout ("trie.out");
char s[30];
int best[100000][26],date[100000],st[100000],vf,rem[100000];
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;
}