Pagini recente » Cod sursa (job #2319020) | Cod sursa (job #295595) | Cod sursa (job #442440) | Cod sursa (job #1261764) | Cod sursa (job #1882264)
#include <iostream>
#include <fstream>
#include <string.h>
#define CH (*s - 'a')
using namespace std;
ifstream f("trie.in");
ofstream g("trie.out");
struct Trie
{
int cnt=0,nrfii=0;
Trie *fii[26];
Trie()
{
memset( fii, 0, sizeof( fii ) );
}
};
Trie *T = new Trie;
void t_insert(Trie *nod,char s[])
{
if ( *s == '\0' ) {nod->cnt++;return;}
if(nod->fii[CH] == 0)
{
nod->fii[ CH ] = new Trie;
nod->nrfii++;
}
t_insert(nod->fii[CH], s+1);
}
void t_delete(Trie *nod,char s[])
{
if(*s=='\0') {nod->cnt--;return;}
t_delete(nod->fii[CH],s+1);
if (nod->fii[CH]->cnt==0 && nod->fii[CH]->nrfii==0)
{
delete nod->fii[CH];
nod->nrfii--;
}
}
int t_querry(Trie *nod,char s[])
{
if(*s=='\0')
return nod->cnt;
if(nod->fii[CH])
return t_querry(nod->fii[CH],s+1);
return 0;
}
int t_prefix(Trie *nod,char s[],int k)
{
if( *s == '\0' || nod->fii[ CH ] == 0 ) return k;
return t_prefix(nod->fii[CH],s+1,k+1);
}
int main()
{
int op;
char cuv[36];
while(f>>op>>cuv)
{
if (op==0) t_insert(T,cuv);
if (op==1) t_delete(T,cuv);
if (op==2) g<<t_querry(T,cuv)<<'\n';
if (op==3) g<<t_prefix(T,cuv,0)<<'\n';
}
}