Pagini recente » Cod sursa (job #1865468) | Cod sursa (job #729776)
Cod sursa(job #729776)
#include<fstream>
using namespace std;
struct trie{
int prefixe, cuvinte;
trie *link[26];
trie()
{for(int i=26; i--;)
link[i]=0;
cuvinte=prefixe=0;
}
};
void inserare(trie *x, char *cuv)
{for(int i=0, t=cuv[i]-97, n=strlen(cuv); i<n; i++, t=cuv[i]-97, x->prefixe++)
if(x->link[t]!=NULL)
x=x->link[t];
else x=x->link[t]=new trie();
x->cuvinte++;
}
void stergere(trie *x, char *cuv)
{for(int i=0, t=cuv[i]-97, n=strlen(cuv); i<n; i++, t=cuv[i]-97, x->prefixe--)
if(x->link[t]!=NULL)
x=x->link[t];
x->cuvinte--;
}
int nr_aparitii(trie *x, char *cuv)
{for(int i=0, t=cuv[i]-97, n=strlen(cuv); i<n; i++, t=cuv[i]-97)
if(x->link[t]!=NULL)
x=x->link[t];
else return 0;
return x->cuvinte;
}
int prefix_comun(trie *x, char *cuv)
{int i=0;
for(int t=cuv[0]-97, n=strlen(cuv); i<n && x->link[t]!=NULL && x->link[t]->prefixe!=0; i++, t=cuv[i]-97)
if(x->link[t]!=NULL)
x=x->link[t];
return i;
}
int main()
{
ifstream f("trie.in");
ofstream g("trie.out");
trie x;
int choice;
char string[26];
for(; f>>choice>>string;)
{switch(choice){ case 0: {inserare(&x, string);;
break;
}
case 1: {stergere(&x, string);
break;
}
case 2: {g<<nr_aparitii(&x, string)<<"\n";
break;
}
case 3: {g<<prefix_comun(&x, string)<<"\n";
break;
}
}
}
fclose(stdin);
fclose(stdout);
return 0;
}