Pagini recente » Cod sursa (job #930863) | Cod sursa (job #352224) | Cod sursa (job #2677482) | Cod sursa (job #576819) | Cod sursa (job #1962228)
#include <bits/stdc++.h>
using namespace std;
ifstream f("trie.in");
ofstream g("trie.out");
struct nod{
char ch;
int nr_ap, exact;
nod *fiu[26];
};
void inserare(nod *p, string s){
if(!p->fiu[s[0]-'a']){
p->fiu[s[0]-'a']=new nod{};
p=p->fiu[s[0]-'a'];
p->nr_ap=1;
p->ch=s[0];
}
else{
p=p->fiu[s[0]-'a'];
p->nr_ap++;
}
for(int i=1; i<s.length(); ++i){
if(!p->fiu[s[i]-'a']){
p->fiu[s[i]-'a']=new nod{};
p=p->fiu[s[i]-'a'];
p->nr_ap=1;
p->ch=s[i];
}
else{
p=p->fiu[s[i]-'a'];
p->nr_ap++;
}
}
p->exact++;
}
void stergere(nod *p, string s){
for(int i=0; i<s.length(); ++i){
p=p->fiu[s[i]-'a'];
p->nr_ap--;
}
p->exact--;
}
void aparitii(nod *p, string s){
for(int i=0; i<s.length(); ++i){
p=p->fiu[s[i]-'a'];
}
g<<p->exact<<"\n";
}
void prefix(nod *p, string s){
for(int i=0; i<s.length(); ++i){
if((!p->fiu[s[i]-'a']) || (p->fiu[s[i]-'a']->nr_ap==0)){
g<<i<<"\n";
return;
}
p=p->fiu[s[i]-'a'];
//g<<p->ch<<" ";
}
g<<s.length()<<"\n";
}
int main()
{
string s;
short q;
nod *rad=new nod{};
while(f>>q>>s){
if(q==0){
inserare(rad,s);
}
if(q==1){
stergere(rad,s);
}
if(q==2){
aparitii(rad,s);
}
if(q==3){
prefix(rad,s);
}
}
return 0;
}