Pagini recente » Cod sursa (job #2893500) | Cod sursa (job #701044) | Cod sursa (job #1288353) | Cod sursa (job #93785) | Cod sursa (job #750409)
Cod sursa(job #750409)
#include <fstream>
#include <cstring>
#define caracter (*s-'a')
using namespace std;
ifstream f("trie.in");
ofstream g("trie.out");
char cuvant[32];
struct nod {
int aparitii, nrfii;
nod *fiu[ 26 ];
nod()
{
aparitii=0;
nrfii=0;
for(int i=0;i<=26;i++)
fiu[i]=0;
}
}*T = new nod;
void insert(nod *p,char *s)
{
if(*s=='\n')
{
p->aparitii++;
return;
}
if(p->fiu[caracter]==0)
{
p->fiu[caracter]=new nod;
p->nrfii ++;
}
insert(p->fiu[caracter],s+1);
}
int sterg(nod *p,char *s)
{
if(*s =='\n')
p->aparitii--;
else if(sterg(p->fiu[caracter],s+1))
{
p->fiu[caracter]=0;
p->nrfii --;
}
if(p->aparitii==0&&p->nrfii==0&&p!=T)
{
delete p;
return 1;
}
return 0;
}
int apare(nod *p,char *s)
{
if(*s=='\n')
return p->aparitii;
if(p->fiu[caracter])
return apare(p->fiu[caracter],s+1);
return 0;
}
int pref(nod *p,char *s,int k)
{
if(*s=='\n'||p->fiu[caracter]==0)
return k;
return pref(p->fiu[caracter],s+1,k+1);
}
int main()
{
int cod;
while(f>>cod)
{
f>>cuvant;
if(cod==0) insert(T,cuvant+2);
if(cod==1) sterg(T,cuvant+2);
if(cod==2) g<<apare(T,cuvant+2)<<"\n";
if(cod==3) g<<pref(T,cuvant+2,0)<<"\n";
}
return 0;
}