Pagini recente » Cod sursa (job #359689) | Cod sursa (job #2205083) | Cod sursa (job #2499456) | Cod sursa (job #1328447) | Cod sursa (job #1888290)
#include <fstream>
#include <string.h>
using namespace std;
ifstream fin("trie.in");
ofstream fout("trie.out");
char s[25];
int n,op;
struct tri{
int cuv,pref;
tri *fii[27];
tri(){
cuv=pref=0;
memset(fii,0,sizeof(fii));}
}*trie;
void add(char s[]){
tri *q=trie;
trie->pref++;
for(int i=0;i<n;i++){
if(q->fii[s[i]]==0)
q->fii[s[i]]=new tri;
q=q->fii[s[i]];
q->pref++;
}
q->cuv++;}
int cuv(char s[]){
tri *q=trie;
for(int i=0;i<n;i++){
if(q->fii[s[i]]==0)
return 0;
q=q->fii[s[i]];
}
return q->cuv;}
int pref(char s[]){
tri *q=trie;
for(int i=0;i<n;i++){
if(q->fii[s[i]]==0 || (q->fii[s[i]]->pref==0))
return i;
q=q->fii[s[i]];
}
return n;}
void del(char s[]){
tri *q=trie;
trie->pref--;
for(int i=0;i<n;i++)
{
q=q->fii[s[i]];
q->pref--;
}
q->cuv--;
}
int main(){
trie=new tri;
while(fin>>op,fin.get(),fin.get(s,25,'\n')){
fin.get();
n=strlen(s);
for(int i=0;i<n;i++)
s[i]-='a';
if(op==0)
add(s);
if(op==1)
del(s);
if(op==2)
fout<<cuv(s)<<'\n';
if(op==3)
fout<<pref(s)<<'\n';}
return 0;}
/*
#include <cstdio>
#include<cstring>
using namespace std;
int n,op;
char s[25];
struct tri
{
int cuv, pref;
tri *fii[27];
tri()
{
cuv=pref=0;
memset(fii,0,sizeof(fii));
}
}*trie;
void add(char s[])
{
tri *q=trie;
trie->pref++;
for(int i=0;i<n;i++)
{
if(q->fii[s[i]]==0)
q->fii[s[i]]=new tri;
q=q->fii[s[i]];
q->pref++;
}
q->cuv++;
}
int cuv(char s[])
{
tri *q=trie;
for(int i=0;i<n;i++)
{
if(q->fii[s[i]]==0)return 0;
q=q->fii[s[i]];
}
return q->cuv;
}
int pref(char s[])
{
tri *q=trie;
for(int i=0;i<n;i++)
{
if(q->fii[s[i]]==0||(q->fii[s[i]]->pref==0))return i;
q=q->fii[s[i]];
}
return n;
}
void del(char s[])
{
tri *q=trie;
trie->pref--;
for(int i=0;i<n;i++)
{
q=q->fii[s[i]];
q->pref--;
}
q->cuv--;
}
int main()
{
freopen("trie.in","r",stdin);
freopen("trie.out","w",stdout);
trie= new tri;
while(scanf("%d %s",&op,&s)!=EOF)
{
n=strlen(s);
for(int i=0;i<n;i++)
s[i]-='a';
if(op==0)
add(s);
else if(op==1)
del(s);
else if(op==2)
printf("%d\n",cuv(s));
else printf("%d\n",pref(s));
}
return 0;
}
*/