Pagini recente » Cod sursa (job #1870609) | Cod sursa (job #1786030) | Cod sursa (job #219483) | Cod sursa (job #2678415) | Cod sursa (job #1166006)
#include<fstream>
using namespace std;
ifstream f("trie.in");
ofstream g("trie.out");
char cuv[50];
int nr , op;
struct nod_trie{
int nrf , nrc;
nod_trie *f[26];
nod_trie(){
nrc = nrf = 0;
for( int i = 0 ; i < 26 ; i++ )
f[i] = 0;
}
} *r;
void add( nod_trie* r , char* c ){
if( (*c) == '\0' ){
r->nrc++;
return;
}
if( r->f[(*c)-'a'] == 0 ){
r->f[(*c)-'a'] = new nod_trie;
r->nrf++;
}
add( r->f[(*c)-'a'] , c+1 );
}
void deletec( nod_trie *r , char* c ){
if( (*c) == '\0' ){
r->nrc--;
return;
}
deletec( r->f[(*c) - 'a'] , c+1 );
if( r->f[(*c) - 'a']->nrf == 0 && r->f[(*c) - 'a']->nrc == 0 ){
delete r->f[(*c) - 'a'];
r->f[(*c) - 'a'] = 0;
r->nrf--;
}
}
void pref( nod_trie* r , char* c ){
if( (*c) == '\0' )
return;
if( r->f[(*c) - 'a'] != 0 ){
nr++;
pref( r->f[(*c) - 'a'] , c + 1 );
}
}
int aparitii( nod_trie *r , char* c ){
if( (*c) == '\0' ){
return r->nrc;
}
if( r->f[ (*c) - 'a' ] == 0 )
return 0;
return aparitii( r->f[ (*c) - 'a' ] , c+1 );
}
int main(){
r = new nod_trie;
while( (f>>op) ){
f>>cuv;
switch( op ){
case 0:
add( r , cuv );
break;
case 1:
deletec( r , cuv );
break;
case 2:
g<<aparitii( r , cuv )<<"\n";
break;
default:
nr = 0;
pref( r, cuv );
g<<nr<<"\n";
break;
}
}
return 0;
}