Pagini recente » Cod sursa (job #2196023) | Cod sursa (job #1645710) | Cod sursa (job #475782) | Cod sursa (job #2920311) | Cod sursa (job #759394)
Cod sursa(job #759394)
#include<fstream>
#include<string>
using namespace std;
struct nod{
struct nod*f[26];
int viz,cuv;
}*t;
string s;
void add(){
nod *g=t;
int urm,i=0;
while((s[i])>='a' && (s[i])<='z')
{
urm = s[i] - 'a';
if(g->f[urm]==0)g->f[urm]=new nod;
g=g->f[urm];
g->viz++;
++i;
}
g->cuv++;
}
void remove(){
nod *g=t;
int urm,i=0;
while((s[i])>='a' && (s[i])<='z')
{
urm = s[i] - 'a';
g=g->f[urm];
g->viz--;
++i;
}
g->cuv--;
}
int aparitii(){
nod *g=t;
int i=0,urm;
while((s[i])>='a' && (s[i])<='z')
{
urm = s[i] - 'a';
if(g->f[urm]==0)return 0;
g=g->f[urm];
++i;
}
return g->cuv;
}
int prefix(){
nod *g=t;
int l=0,p=0,i=0,urm;
while((s[i])>='a' && (s[i])<='z')
{
urm = s[i] - 'a';
if(g->f[urm]==0)break;
g=g->f[urm];
++i;
++p;
if(g->viz>0)l=p;
}
return l;
}
int main(void){
ifstream fin("trie.in");
ofstream fout("trie.out");
int c;
t=new nod;
do{
s.clear();
fin>>c>>s;
switch(c){
case 0: add(); break;
case 1: remove(); break;
case 2: fout<<aparitii()<<'\n';
case 3: fout<<prefix()<<'\n';
}
}while(s!="");
return 0;
}