Pagini recente » Cod sursa (job #625204) | Cod sursa (job #3259389) | Cod sursa (job #1129308) | Cod sursa (job #1571223) | Cod sursa (job #2552388)
#include <bits/stdc++.h>
#define fiu s[lg]-'a'
using namespace std;
ifstream f("trie.in");
ofstream g("trie.out");
int n,k;
string s;
struct trie {int fr,nrCuvinte,muchie[30];};
trie v[185000];
void Update(int nod,int lg,int x)
{ if(lg==s.size())
{ v[nod].nrCuvinte+=x;
v[nod].fr+=x;
return;
}
if(!v[nod].muchie[fiu])
v[nod].muchie[fiu]=++k;
v[v[nod].muchie[fiu]].fr+=x;
Update(v[nod].muchie[fiu],lg+1,x);
}
int Query(int nod,int lg)
{ if(lg==s.size())
return v[nod].nrCuvinte;
if(!v[nod].muchie[fiu])
return 0;
if(!v[v[nod].muchie[fiu]].fr)
return 0;
return Query(v[nod].muchie[fiu],lg+1);
}
int main()
{ for(int t; f>>t;)
{ f>>s;
if(!t)
Update(0,0,1);
else
if(t==1)
Update(0,0,-1);
else
if(t==2)
g<<Query(0,0)<<'\n';
else
{ int nod=0,lg=0;
while(v[nod].muchie[fiu] && lg<s.size())
{ if(!v[v[nod].muchie[fiu]].fr)
break;
nod=v[nod].muchie[fiu];
lg++;
}
g<<lg<<'\n';
}
}
g.close(); f.close(); return 0;
}