Pagini recente » Cod sursa (job #1471850) | Cod sursa (job #1114900) | Cod sursa (job #1557423) | Cod sursa (job #2629144) | Cod sursa (job #1754409)
#include <bits/stdc++.h>
using namespace std;
int c; string s;
struct Trie{
int nr, nrfii;
Trie *fii[26];
Trie(){
nr = nrfii=0;
for(int i=0;i<=26;i++) fii[i]=0;
}
};
Trie *T = new Trie;
void add(Trie *nod, char *s){
if(*s=='\n'){
nod->nr++;
return;
}
else{
if(nod->fii[*s-'a']==0){
nod->fii[*s-'a'] = new Trie;
nod->nrfii++;
}
add(nod->fii[*s-'a'], s+1);
}
}
bool rem(Trie *nod, char *s){
if(*s=='\n'){
nod->nr--;
}
else if(rem(nod->fii[*s-'a'],s+1)){
nod->nrfii--;
nod->fii[*s-'a']=0;
}
if(nod->nr==0 && nod->nrfii==0 && nod!=T){
delete nod; return 1;
}
return 0;
}
int qry(Trie *nod, char *s){
if(*s=='\n'){
return nod->nr;
}
else{
if(nod->fii[*s-'a']==0) return 0;
else{
return qry(nod->fii[*s-'a'],s+1);
}
}
}
int lng(Trie *nod, char *s, int p){
if(*s=='\n'){
return p;
}
else{
if(nod->fii[*s-'a']==0) return p;
else{
return lng(nod->fii[*s-'a'],s+1,p+1);
}
}
}
int main()
{
char line[ 32 ];
freopen( "trie.in", "r", stdin );
freopen( "trie.out", "w", stdout );
fgets( line, 32, stdin );
while( !feof( stdin ) ) {
switch( line[0] ) {
case '0': add( T, line+2 ); break;
case '1': rem( T, line+2 ); break;
case '2': printf( "%d\n", qry( T, line+2 ) ); break;
case '3': printf( "%d\n", lng( T, line+2, 0 ) ); break;
}
fgets( line, 32, stdin );
}
return 0;
}