Pagini recente » Cod sursa (job #1867999) | Cod sursa (job #2166538) | Cod sursa (job #1797355) | Cod sursa (job #1426831) | Cod sursa (job #2307374)
#include <iostream>
#include <iomanip>
#include <fstream>
#define MAX 2000010
#define x first
#define y second
using namespace std;
struct nod{
nod *fiu[('z'-'a'+1)];
int val;
int nrt;
};
nod *creeaza_nod(){
nod *na = new nod;
na->val=0; na->nrt=0;
for(int i='a';i<='z';i++) na->fiu[i-'a']=0;
return na;
}
int o;
nod *n0=creeaza_nod();
string s;
void adauga(string cv){
int i;
nod *nda;
for(i=0,nda=n0;i<cv.size();i++){
nda->nrt++;
if(nda->fiu[cv[i]-'a']==0)
nda->fiu[cv[i]-'a']=creeaza_nod();
nda=nda->fiu[cv[i]-'a'];
}
nda->nrt++;
(nda->val)++;
}
void sterge(string cv){
int i;
nod *nda;
for(i=0,nda=n0;i<cv.size();i++){
nda->nrt--;
nda=nda->fiu[cv[i]-'a'];
}
nda->nrt--;
(nda->val)--;
}
int nraparitii(string cv){
int i;
nod *nda;
for(i=0,nda=n0;i<cv.size();i++) nda=nda->fiu[cv[i]-'a'];
return (nda->val);
}
int sufmaxcom(string cv){
int i,ansa=0;
nod *nda;
for(i=0,nda=n0;i<cv.size();i++){
if(nda->fiu[cv[i]-'a']==0)
nda->fiu[cv[i]-'a']=creeaza_nod();
nda=nda->fiu[cv[i]-'a'];
if((nda->nrt)!=0)ansa=i+1;
}
return ansa;
}
int main()
{
ifstream f ("trie.in");
ofstream g ("trie.out");
while(f>>o){
f>>s;
if(o==0)adauga(s);
if(o==1)sterge(s);
if(o==2)g<<nraparitii(s)<<'\n';
if(o==3)g<<sufmaxcom(s)<<'\n';
}
f.close ();
g.close ();
return 0;
}