Pagini recente » Cod sursa (job #610802) | Cod sursa (job #1520915)
#include<bits/stdc++.h>
using namespace std;
struct Trie
{
int ap,frecv;
Trie *t[26];
Trie()
{
ap=frecv=0;
for (int i=0;i<26;i++) t[i]=NULL;
}
};
ifstream fin("trie.in");
ofstream fout("trie.out");
int n,cnt;
char s[25];
Trie *root=new Trie();
void Add(Trie *p,int poz)
{
if (poz>1) p->frecv++;
if (poz==n+1)
{
p->ap++;
return;
}
if (p->t[s[poz]-'a']==NULL) p->t[s[poz]-'a']=new Trie();
Add(p->t[s[poz]-'a'],poz+1);
}
void Sub(Trie *p,int poz)
{
if (poz>1) p->frecv--;
if (poz==n+1)
{
p->ap--;
return;
}
Sub(p->t[s[poz]-'a'],poz+1);
}
int Cate(Trie *p,int poz)
{
if (poz==n+1) return p->ap;
if (p->t[s[poz]-'a']==NULL) return 0;
Cate(p->t[s[poz]-'a'],poz+1);
}
void Pref(Trie *p,int poz)
{
if (poz==n+1 || p->t[s[poz]-'a']==NULL) return ;
if (p->t[s[poz]-'a']->frecv==0) return;
cnt++;
Pref(p->t[s[poz]-'a'],poz+1);
}
int main()
{
int i,op;
while (fin>>op)
{
fin>>(s+1);
n=strlen(s+1);
if (op==0) Add(root,1);
if (op==1) Sub(root,1);
if (op==2) fout<<Cate(root,1)<<"\n";
if (op==3) {cnt=0;Pref(root,1);fout<<cnt<<"\n";}
}
return 0;
}