Pagini recente » Cod sursa (job #114891) | Cod sursa (job #123549) | Cod sursa (job #6814) | Cod sursa (job #113037) | Cod sursa (job #286041)
Cod sursa(job #286041)
#include <fstream.h>
#include <string.h>
ifstream fin("trie.in");
ofstream fout("trie.out");
struct trie{int nrcuv, nrfii; trie *fiu[26];
trie()
{nrfii=nrcuv=0;
memset(fiu,0,sizeof(fiu));
}
};
trie *T=new trie;
char c[32],*cuv;
void insert(trie *nod, char *s)
{if (*s==0)
{nod->nrcuv++;
return;
}
if (nod->fiu[*s-'a']==0)
{nod->nrfii++;
nod->fiu[*s-'a']=new trie;
}
insert(nod->fiu[*s-'a'],s+1);
}
int cut(trie *nod, char *s)
{if (*s==0)
nod->nrcuv--;
else
if (cut(nod->fiu[*s-'a'], s+1))
{nod->nrfii--;
nod->fiu[*s-'a']=0;
}
if (nod->nrfii==0 && nod->nrcuv==0 && nod!=T)
{delete nod;
return 1;}
return 0;
}
int aparitii(trie *nod, char *s)
{if (*s==0) return nod->nrcuv;
if (nod->fiu[*s-'a'])
return aparitii(nod->fiu[*s-'a'], s+1);
return 0;
}
int prefix(trie *nod, char *s)
{if (*s!=0)
if (nod->fiu[*s-'a'])
return 1+prefix(nod->fiu[*s-'a'], s+1);
return 0;
}
int main()
{fin.getline(c,32);
while (c[0]=='0' || c[0]=='1'|| c[0]=='2'|| c[0]=='3')
{cuv=c;
if (c[0]=='0') insert(T,cuv+2);
if (c[0]=='1') cut(T,cuv+2);
if (c[0]=='2') fout<<aparitii(T,cuv+2)<<'\n';
if (c[0]=='3') fout<<prefix(T,cuv+2)<<'\n';
fin.getline(c,32);
}
fout.close();
return 0;
}