Pagini recente » Cod sursa (job #276508) | Cod sursa (job #113034) | Cod sursa (job #303965) | Cod sursa (job #7461) | Cod sursa (job #283635)
Cod sursa(job #283635)
#include <fstream.h>
#include <string.h>
ifstream fin("trie.in");
ofstream fout("trie.out");
const char key[]="0123";
struct trie{int nrcuv, nrfii; trie *fiu[26];
trie()
{nrfii=nrcuv=0;
memset(fiu,0,sizeof(fiu));
}
};
trie *T=new trie;
char c[50],*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))
delete nod;
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.get(c,50,'\n');
while (c[0]=='0' || c[0]=='1'|| c[0]=='2'|| c[0]=='3')
{cuv=c;
if (cuv[0]=='0') insert(T,cuv+2);
if (cuv[0]=='1') cut(T,cuv+2);
if (cuv[0]=='2') fout<<aparitii(T,cuv+2)<<'\n';
if (cuv[0]=='3') fout<<prefix(T,cuv+2)<<'\n';
fin.get();
fin.get(c,50,'\n');
}
fout.close();
return 0;
}