Pagini recente » Cod sursa (job #1758451) | Cod sursa (job #961827) | Cod sursa (job #249921) | Cod sursa (job #1747819) | Cod sursa (job #270707)
Cod sursa(job #270707)
#include<stdio.h>
#include<string.h>
FILE *f = fopen("trie.in","r");
FILE *g = fopen("trie.out","w");
struct trie {
int nr;
int fii;
trie *next[26];
trie(){
nr=0;
fii=0;
memset(next,0,sizeof(next));
}
};
trie *R = new trie;
void Insert(trie *nod,char *p){
if( *p == '\n') { nod->nr++; return; }
if(!nod->next[*p - 'a']){
nod->next[*p - 'a'] = new trie;
nod->fii++;
}
Insert(nod->next[*p - 'a'],p+1);
}
int Delete(trie *nod, char *p){
if(*p == '\n') nod->nr--;
else if( Delete(nod->next[*p - 'a'], p+1) ) {
nod->next[*p - 'a'] = 0;
nod->fii--;
}
if(nod->nr == 0 && nod->fii == 0 && nod != R){
delete nod; return 1;
}
return 0;
}
int Prefix(trie *nod , char *p,int dim){
if( *p == '\n' || nod->next[ *p - 'a' ] == 0) return dim;
return Prefix(nod->next[ *p - 'a' ],p+1,dim+1);
}
int Query(trie *nod, char *p){
if ( *p == '\n' ) return nod->nr;
if(nod->next[ *p - 'a' ]) return Query(nod->next[ *p - 'a' ],p + 1);
return 0;
}
int main(){
char buff[35];
while(!feof(f)) {
fgets(buff,35,f);
switch (buff[0]) {
case '0': Insert(R,buff+2); break;
case '1': Delete(R,buff+2); break;
case '2': fprintf(g,"%d\n",Query(R,buff+2) ); break;
case '3': fprintf(g,"%d\n",Prefix(R,buff+2,0));break;
}
}
return 0;
}