Pagini recente » Cod sursa (job #2214387) | Cod sursa (job #93098) | Cod sursa (job #3259744) | Cod sursa (job #1434843) | Cod sursa (job #2641350)
#include <bits/stdc++.h>
using namespace std;
struct Trie
{
int cnt = 0 , nr_fii = 0 ;
Trie *fiu[26];
Trie(){
cnt = nr_fii = 0 ;
memset(fiu , 0 , sizeof(fiu));
}
};
Trie *T = new Trie;
void insertword(Trie *nod , char *s)
{
if(*s == '\n')
{nod->cnt++;return ;}
if(nod->fiu[*s-'a'] == 0 )
{++nod->nr_fii;
nod->fiu[*s-'a'] = new Trie;}
insertword(nod->fiu[*s-'a'] , s+1);
}
bool deleteword(Trie *nod , char *s)
{
if(*s == '\n')
nod->cnt--;
else
if(deleteword(nod->fiu[*s-'a'],s+1))
{
nod->fiu[*s-'a'] = 0 ;
nod->nr_fii --;
}
if(nod->cnt == 0 && nod->nr_fii == 0 && nod!=T)
{
delete nod;
return 1;
}
return 0;
}
int que(Trie *nod , char *s)
{
if(*s == '\n')return nod->cnt;
if(nod->fiu[*s-'a'] == 0)return 0;
return que(nod->fiu[*s-'a'],s+1);
}
int prefix(Trie *nod , char *s , int k)
{
if(*s == '\n')return k;
if(nod->fiu[*s-'a']== 0)
return k;
return prefix(nod->fiu[*s-'a'],s+1,k+1);
}
int nr;
char s[32];
int main()
{
freopen("trie.in","r",stdin);
freopen("trie.out","w",stdout);
fgets(s,32,stdin);
while(!feof(stdin))
{
nr = s[0]-'0';
if(nr == 0)insertword(T,s+2);
if(nr == 1)deleteword(T,s+2);
if(nr == 2)cout<<que(T,s+2)<<'\n';
if(nr ==3)cout<<prefix(T,s+2,0)<<'\n';
fgets(s,32,stdin);
}
return 0;
}