Pagini recente » Cod sursa (job #1861978) | Cod sursa (job #519891) | Cod sursa (job #2870963) | Cod sursa (job #1669417) | Cod sursa (job #2403134)
#include <bits/stdc++.h>
#define CH (*c-'a')
using namespace std;
ifstream fin("trie.in");
ofstream fout("trie.out");
struct Trie{
Trie* fiu[26];
int EndW,CntP;//final de cuvant si prefix
Trie()
{
EndW=CntP=0;
for(int i=0;i<26;i++)fiu[i]=NULL;
}
};
Trie *T= new Trie;
Trie *r,*rfiu;
Trie* v[21];
char sir[25],c;
int cnt;
int main()
{
int op;
while(fin>>op)
{
fin>>sir;
if(op==0){
r=T;
int l=strlen(sir);
for(int i=0;i<l;i++)
{
if(!r->fiu[int(sir[i]-'a')])
{
r->fiu[sir[i]-'a']=new Trie;
}
r->CntP++;
r=r->fiu[sir[i]-'a'];
}
r->EndW++;
}
if(op==1){
r=T;
int i,l=strlen(sir);
for(i=0;i<l;i++)
{
r->CntP--;
v[i]=r;
r=r->fiu[sir[i]-'a'];
}
r->EndW--;
v[i]=r;
for(int j=l,i=l-1;;i--,j--)
{
if(v[j]->EndW!=0 || v[j]->CntP!=0 || v[j]==T)break;
r=v[j];
v[i]->fiu[sir[i]-'a']=NULL;
delete r;
}
memset(v,0,sizeof(v));
}
if(op==2){
r=T;
int l=strlen(sir);
int i;
for(i=0;i<l;i++)
{
if(!r->fiu[int(sir[i]-'a')])break;
r=r->fiu[sir[i]-'a'];
}
if(i<l)fout<<"0\n";
else fout<<r->EndW<<'\n';
}
if(op==3)
{
r=T;
int i,l=strlen(sir);
for(i=0;i<l;i++)
{
if(!r->fiu[int(sir[i]-'a')])break;
r=r->fiu[sir[i]-'a'];
}
fout<<i<<'\n';
}
}
return 0;
}