Pagini recente » Cod sursa (job #2356951) | Cod sursa (job #227499) | Cod sursa (job #1535636) | Monitorul de evaluare | Cod sursa (job #750642)
Cod sursa(job #750642)
#include<fstream>
#include<string.h>
#define CH (s[i]-'a')
using namespace std;
ifstream f("trie.in");
ofstream g("trie.out");
struct trie
{
int nr_cuv;
int nr_fii;
trie *litera[26];
trie()
{
nr_cuv=0;
nr_fii=0;
//for(int i=0;i<=26;i++)
//litera[i]=0;
memset(litera,0,sizeof(litera));
}
};
trie *T=new trie;
void insert(char s[21])
{
int i=0;
trie *t=T;
while(i<=strlen(s))
{ if (i==strlen(s))
{
t->nr_cuv++;
return;
}
if(t->litera[CH]!=0)
{
t->nr_fii++;
t=t->litera[CH];
i++;
}
else
if(t->litera[CH]==0)
{
t->litera[CH]=new trie;
t->nr_fii++;
t=t->litera[CH];
i++;
}
}
}
void del(char s[21])
{ int i=0;
trie *t=T;
while(i<=strlen(s))
{ if(i==strlen(s) && t->nr_cuv>=0)
{ t->nr_cuv--; return;}
if(t->litera[CH]!=0)
{ t->nr_fii--; t=t->litera[CH]; i++; }
}
}
void ap(char s[21])
{
int i=0;
trie *t=T;
while(i<=strlen(s))
{
if (i==strlen(s))
{
g<<t->nr_cuv<<"\n";
return ;
}
if (t->litera[CH]!=0)
{
t=t->litera[CH];
i++;
}
else
{
g<<"0\n";
return;
}
}
}
void pref(char s[21])
{
int i=0,prefix=0;
trie *t=T;
while(i<=strlen(s))
{
if(i==strlen(s))
{
g<<strlen(s)<<"\n";
return;
}
if(t->litera[CH]==0)
{
g<<prefix<<"\n";
return ;
}
if(t->litera[CH]!=0)
{
t=t->litera[CH];
if (t->nr_fii==0 && t->nr_cuv==0 )
{
g<<i<<"\n";
return;
}
else
{
i++;
prefix=i;
}
}
else
{
g<<prefix<<"\n";
return ;
}
}}
int main()
{
int op_cod;
char s[21];
while(f>>op_cod)
{
f>>s;
if(op_cod==0)
insert(s);
if(op_cod==1)
del(s);
if(op_cod==2)
ap(s);
if(op_cod==3)
pref(s);
}
return 0;
}