Pagini recente » Cod sursa (job #1101022) | Monitorul de evaluare | Cod sursa (job #2452873) | Cod sursa (job #2754151) | Cod sursa (job #2090886)
#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);
if(x==1)
sterge(0);
if(x==2)
write_1(0);
if(x==3)
write_2(0);
}
}
int main()
{
solve();
return 0;
}