Pagini recente » Cod sursa (job #3030874) | Cod sursa (job #1694566) | Cod sursa (job #2811912) | Cod sursa (job #1879200) | Cod sursa (job #1654747)
#include <iostream>
#include <fstream>
#include <cstring>
using namespace std;
ifstream f("trie.in");
ofstream g("trie.out");
struct trie
{ int ap,fin;
trie *son[28];
trie()
{ ap=fin=0;
for(int i=1;i<=27;i++)
son[i]=NULL;
}
};
trie *rad,*act;
void Change(char s[25],int val)
{ int i,num,len=strlen(s);
act=rad;
for(i=0;i<len;i++)
{ num=s[i]-96;
if (act->son[num]!=NULL)
{ act=act->son[num];
act->ap+=val;
}
else
{ act->son[num]=new trie;
act=act->son[num];
}
act->ap+=val;
}
act->fin+=val;
}
void Search(char s[25])
{ int i,num,len=strlen(s),res;
act=rad;
for(i=0;i<len;i++)
{ num=s[i]-96;
if (act->son[num]!=NULL)
act=act->son[num];
else return;
}
g<<act->fin<<"\n";
}
void Prefix(char s[25])
{ int i,num,len=strlen(s),res;
act=rad;
for(i=0;i<len;i++)
{ num=s[i]-96;
if (act->son[num]!=NULL && (act->son[num])->ap>0)
act=act->son[num];
else { g<<i<<"\n"; return;}
}
g<<len<<"\n";
}
int main()
{ int t; char sir[25];
rad=new trie;
while(!f.eof())
{ f>>t>>sir;
if (f.eof()) break;
if (!t) Change(sir,1);
if (t==1) Change(sir,-1);
if (t==2) Search(sir);
if (t==3) Prefix(sir);
}
return 0;
}