Pagini recente » Cod sursa (job #944004) | Rating Rusu Gabriela Claudia (GabrielaRusu935) | Cod sursa (job #195878) | Cod sursa (job #1209708) | Cod sursa (job #2088314)
#include <fstream>
using namespace std;
ifstream fin ("trie.in");
ofstream fout ("trie.out");
struct trie{
int fii,nr;
trie *f[26];
trie (){
fii = nr = 0;
for (int i=0;i<26;i++)
f[i] = 0; /// trebuie sa initializam cu 0
}
};
trie *root = new trie;
char s[25];
int c;
void insertTrie (trie *rad, char *s){
if (*s != 0){
if (rad->f[*s - 'a'] == 0){
rad->f[*s - 'a'] = new trie;
rad->fii++;
}
insertTrie (rad->f[*s-'a'],s+1);
} else
rad->nr++;
}
int deleteTrie (trie *&rad, char *s){
if (*s == 0){
rad->nr--;
if (rad->nr == 0 && rad->fii == 0 && rad != root){
delete rad;
rad = NULL;
return 1;
}
} else{
if ( deleteTrie (rad->f[*s-'a'],s+1 ) ){
rad->fii --;
if (rad->fii == 0 && rad->nr == 0 && rad != root){
delete rad;
rad = NULL;
return 1;
}
}
}
return 0;
}
int queryTrie (trie *rad,char *s){
if (*s == 0)
return rad->nr;
if (rad->f[*s-'a'] == NULL)
return 0;
else
queryTrie(rad->f[*s-'a'],s+1);
}
int prefix (trie *rad, char *s){
if (*s == 0)
return 0;
if (rad->f[*s-'a'] == NULL)
return 0;
else
return 1 + prefix (rad->f[*s-'a'],s+1);
}
int main (){
while (fin>>c>>s){
if (c == 0) /// adauga o aparitie a cuvantului s in lista
insertTrie(root,s);
else{
if (c == 1) /// sterge o aparitie a cuvantului s din lista
deleteTrie(root,s);
else{
if (c == 2) /// tipareste numarul de aparitii al cuvantului s
fout<<queryTrie(root,s)<<"\n";
else /// tipareste lungimea celui mai lung prefix comun al lui s cu orice cuvant din lista
fout<<prefix (root,s)<<"\n";
}
}
}
return 0;
}