Pagini recente » Cod sursa (job #2703649) | Cod sursa (job #1309074) | Cod sursa (job #1931182) | Cod sursa (job #1966037) | Cod sursa (job #769633)
Cod sursa(job #769633)
#include<fstream>
#include<string>
#include<cstring>
using namespace std;
struct trie{
struct trie *f[26];
int nr,cuv;
trie(){nr=cuv=0;
memset(f,0,sizeof(f));}
}*t;
string s;
void add(){
trie *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 trie;
g=g->f[urm];
g->nr++;
++i;
}
++g->cuv;
}
void remove(){
trie *g=t;
int urm,i=0;
while(s[i]>='a' && s[i]<='z')
{
urm = s[i] - 'a';
g=g->f[urm];
g->nr--;
++i;
}
g->cuv--;
}
int aparitii(){
trie *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(){
trie *g=t;
int l=0,i=0,urm;
while((s[i])>='a' && (s[i])<='z')
{
urm = s[i] - 'a';
if(g->f[urm]==0)return l;
g=g->f[urm];
if(g->nr==0)return l;
++i;
++l;
}
return l;
}
int main(void){
ifstream fin("trie.in");
ofstream fout("trie.out");
int c;
t=new trie;
do{
s.clear();
fin>>c>>s;
if(s!="")
switch(c){
case 0: add(); break;
case 1: remove(); break;
case 2: fout<<aparitii()<<'\n'; break;
case 3: fout<<prefix()<<'\n'; break;
}
}while(s!="");
return 0;
}