Pagini recente » Cod sursa (job #117415) | Cod sursa (job #453757) | Cod sursa (job #2338991) | Cod sursa (job #742418) | Cod sursa (job #2810913)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("trie.in");
ofstream fout("trie.out");
struct Trie
{
int fr; /// frecventa de aparitie
int cnt; /// cate cuvinte trec prin nod
Trie *leg[26];
Trie(int frecv, int contor)
{
fr = frecv;
cnt = contor;
for (int i = 0; i < 26; i++)
leg[i] = NULL;
}
};
Trie *T;
void Op0(char cuv[])
{
Trie *p, *q;
int i, j;
p = T;
for (i = 0; cuv[i]; i++)
{
j = cuv[i] - 'a';
if (p->leg[j] != NULL)
{
p = p->leg[j];
p->cnt++;
}
else
{
q = new Trie(0,1);
p->leg[j] = q;
p=q;
}
}
p->fr++;
}
void Op1(char cuv[])
{
Trie *p=T;
int j;
for(int i=0; cuv[i]; i++)
{
j=cuv[i]-'a';
p=p->leg[j];
p->cnt--;
}
p->fr--;
}
int Op2(char cuv[])
{
Trie *p=T;
int j;
for(int i=0; cuv[i]; i++)
{
j=cuv[i]-'a';
if(p->leg[j]==NULL)
return 0;
p=p->leg[j];
}
return p->fr;
}
/// anual
/// are
/// ana
int Op3(char cuv[])
{
Trie *p=T;
int res=0;
int j;
for(int i=0; cuv[i]; i++)
{
j=cuv[i]-'a';
if(p->leg[j]==NULL)
return res;
p=p->leg[j];
if(p->cnt>0)
res++;
else
return res;
}
return res;
}
int main()
{
T = new Trie(0, 0);
int t;
char w[22];
while(fin>>t>>w)
{
if(t==0)
Op0(w);
else if(t==1)
Op1(w);
else if(t==2)
fout<<Op2(w)<<"\n";
else
fout<<Op3(w)<<"\n";
}
return 0;
}