Pagini recente » Cod sursa (job #3270526) | Cod sursa (job #1573716) | Cod sursa (job #2247724) | Cod sursa (job #574063) | Cod sursa (job #228474)
Cod sursa(job #228474)
#include <fstream>
#include <string.h>
using namespace std;
ifstream fin ("trie.in");
ofstream fout ("trie.out");
struct nod
{
int nr_ap,nr_fin;
nod *sir[26];
nod ()
{
nr_ap=nr_fin=0;
memset(sir,0,sizeof(sir));
}
}*A;
char s[30];
void baga(int lg)
{
nod *Q=A;
for (int i=0;i<lg;i++)
{
if (Q->sir[s[i]-'a']==NULL)
Q->sir[s[i]-'a']=new nod;
Q=Q->sir[s[i]-'a'];
Q->nr_ap++;
}
Q->nr_fin++;
}
void sterge(int lg)
{
nod *Q=A,*Q1;
for (int i=0;i<lg;i++)
{
Q1=Q;
Q=Q->sir[s[i]-'a'];
Q->nr_ap--;
if (Q1->nr_ap==0)
delete Q1;
else
if (Q->nr_ap==0)
Q1->sir[s[i]-'a']=NULL;
}
Q->nr_fin--;
if (Q->nr_ap==0)
delete Q;
}
int nr_aparitii(int lg)
{
nod *Q=A;
for (int i=0;i<lg;i++)
{
if (Q->sir[s[i]-'a']==NULL)
return 0;
Q=Q->sir[s[i]-'a'];
}
return Q->nr_fin;
}
int pref_max(int lg)
{
nod *Q=A;
for (int i=0;i<lg;i++)
{
if (Q->sir[s[i]-'a']==NULL)
return i;
Q=Q->sir[s[i]-'a'];
}
return lg;
}
int main()
{
int x;
char c;
A=new nod;
A->nr_ap=1;
while (!fin.eof())
{
fin>>x;
fin.get(c);
fin.getline(s,25);
if (!strlen(s))
return 0;
switch (x)
{
case 0:{
baga(strlen(s));
break;
}
case 1:{
sterge(strlen(s));
break;
}
case 2:{
fout<<nr_aparitii(strlen(s))<<"";
break;
}
case 3:{
fout<<pref_max(strlen(s))<<"";
break;
}
}
}
return 0;
}