Pagini recente » Cod sursa (job #3293506) | Cod sursa (job #617849) | Cod sursa (job #172316) | Cod sursa (job #2023930) | Cod sursa (job #2030340)
#include <fstream>
#define lit sir[poz]-'a'
using namespace std;
ifstream fi ("trie.in");
ofstream fo ("trie.out");
struct nod
{
int cuv,nrfii;
nod *urm[26];
nod()
{
cuv=0;
nrfii=0;
for (int i=0;i<26;i++) urm[i]=NULL;
}
};
nod *cap;
string sir;
int op;
void adaug(nod *&curent,int poz)
{
if (curent==NULL) curent=new nod;
if (poz==sir.size())
{
curent -> cuv++;
}
else
{
curent -> nrfii++;
adaug(curent->urm[lit],poz+1);
}
}
void sterg(nod *&curent,int poz)
{
if (poz==sir.size())
curent -> cuv--;
else
{
curent -> nrfii--;
sterg(curent -> urm[lit],poz+1);
}
}
int aparitii(nod *&curent,int poz)
{
if (curent==NULL) return 0;
if (poz==sir.size()) return curent -> cuv;
else return aparitii(curent -> urm[lit],poz+1);
}
int lgprefix(nod *&curent,int poz)
{
if (curent -> urm[lit]==NULL) return poz;
if (poz==sir.size()) return poz;
if (curent ->urm[lit] -> nrfii>0 or curent -> urm[lit] -> cuv>0) return lgprefix(curent->urm[lit],poz+1);
return poz;
}
int main()
{
cap=new nod;
while (fi>>op)
{
fi>>sir;
if (op==0) adaug(cap,0);
if (op==1) sterg(cap,0);
if (op==2) fo<<aparitii(cap,0)<<'\n';
if (op==3) fo<<lgprefix(cap,0)<<'\n';
}
return 0;
}