Pagini recente » Cod sursa (job #2283549) | Cod sursa (job #2746587) | Cod sursa (job #715482) | Cod sursa (job #1790637) | Cod sursa (job #1805542)
///CODUL PANA
#include<fstream>
#include<cstring>
using namespace std;
ifstream fin("in");
ofstream fout("out");
struct trie
{
int S,C;
trie *N[26];
trie()
{
C=S=0;
for(int i=0; i<26; i++)N[i]=0;
}
};
trie *R,*Q,*X,*ST[30];
int x,i,j,LG;
char L[30];
int main()
{
R=new trie;
R->S++;
while(fin>>x>>L)
{
LG=strlen(L);
if(x==3)
{
for(i=0,Q=R; i<LG; i++)
{
if(!Q->N[L[i]-'a'])break;
Q=Q->N[L[i]-'a'];
}
fout<<i<<'\n';
continue;
}
if(x==2)
{
for(i=0,Q=R; i<LG; i++)
{
if(!Q->N[L[i]-'a'])break;
Q=Q->N[L[i]-'a'];
}
if(i==LG)
fout<<Q->C<<'\n';
else
fout<<0<<"\n";;
continue;
}
for(Q=R,i=0; i<LG; i++)
{
ST[i]=Q;
if(!Q->N[L[i]-'a'])Q->N[L[i]-'a']=new trie;
Q=Q->N[L[i]-'a'];
}
ST[LG]=Q;
if(!x)
{
for(i=0; i<LG; i++)ST[i]->S++;
ST[LG]->C++;
continue;
}
for(i=0; i<LG; i++)ST[i]->S--;
ST[LG]->C--;
for(i=LG-1,j=LG;; i--,j--)
{
if(ST[j]->C+ST[j]->S)break;
X=ST[j];
ST[j]=ST[i]->N[L[i]-'a']=0;
delete X;
}
}
return 0;
}