Pagini recente » Cod sursa (job #2086404) | Cod sursa (job #1369802) | Cod sursa (job #2776006) | Cod sursa (job #3209059) | Cod sursa (job #1234900)
//
// main.cpp
// trie_100
//
// Created by Alex Petrache on 26/09/14.
// Copyright (c) 2014 Alex Petrache. All rights reserved.
//
#include <iostream>
#include <cstring>
using namespace std;
struct Trie{
int cnt, nrfii;
Trie *fiu[26];
Trie(){
cnt=nrfii=0;
memset(fiu, 0, sizeof(fiu));
}
};
Trie *T=new Trie;
void insert(Trie *nod, char *s){
if(*s=='\n'){
nod->cnt++;
return;
}
if(nod->fiu[*s-'a']==0){
nod->fiu[*s-'a']=new Trie;
nod->nrfii++;
}
insert(nod->fiu[*s-'a'],s+1);
}
int que(Trie *nod, char *s){
if(*s=='\n')
return nod->cnt;
if(nod->fiu[*s-'a'])
return que(nod->fiu[*s-'a'],s+1);
return 0;
}
int pre(Trie *nod, char*s, int contor){
if(*s=='\n' || nod->fiu[*s-'a']==0)
return contor;
return pre(nod->fiu[*s-'a'],s+1,contor+1);
}
bool del(Trie *nod, char *s){
if(*s=='\n')
nod->cnt--;
else if(del(nod->fiu[*s-'a'],s+1)){
nod->fiu[*s-'a']=0;
nod->nrfii--;
}
if(nod->cnt==0 && nod->nrfii==0 && nod!=T){
delete nod;
return 1;
}
return 0;
}
int main(int argc, const char * argv[])
{
char line[ 32 ];
//freopen( "/Users/alexpetrache/Documents/Programare/Xcode/trie_100/trie_100/trie.in", "r", stdin );
freopen( "trie.in", "r", stdin );
freopen( "trie.out", "w", stdout );
fgets( line, 32, stdin );
while( !feof( stdin ) ) {
switch( line[0] ) {
case '0': insert(T,line+2); break;
case '1': del( T, line+2 ); break;
case '2': printf( "%d\n", que( T, line+2 ) ); break;
case '3': printf("%d\n",pre( T, line+2, 0)); break;
}
fgets( line, 32, stdin );
}
return 0;
}