Pagini recente » Cod sursa (job #3158624) | Rating UNIBUC TANASESCU POPESCU MUSUROI (Unibuc_Forza_Dragulici) | Cod sursa (job #2725995) | Cod sursa (job #547032) | Cod sursa (job #3285560)
#include <bits/stdc++.h>
using namespace std;
ifstream f("trie.in");
ofstream g("trie.out");
int t,m,n,i,j,a,b;
struct nod{
nod *son[26];
int term=0;
int cnt=0;
nod (){
for (int i=0;i<26;i++){
son[i]=nullptr;
}
}
}*root;
void add(string s){
nod *a=root;
for (int i=0;i<s.size();i++){
int ind=s[i]-'a';
if(!a->son[ind]){
a->son[ind]=new nod;
a->son[ind]->cnt++;
}
else{
a->son[ind]->cnt++;
}
a=a->son[ind];
}
a->term++;
}
void del(string s){
nod *a=root;
for (int i=0;i<s.size();i++){
a=a->son[s[i]-'a'];
a->cnt--;
if (i==s.size()-1){
a->term--;
}
}
}
int task2(string s){
nod *a=root;
for (i=0;i<s.size();i++){
int ind=s[i]-'a';
if (!a->son[ind]||a->son[ind]->cnt==0)return 0;
a=a->son[ind];
}
return a->term;
}
int task3(string s){
nod *a=root;
for (i=0;i<s.size();i++){
int ind=s[i]-'a';
if (!a->son[ind]||a->son[ind]->cnt==0)return i;
a=a->son[ind];
}
return i;
}
int main()
{ root= new nod;
string s;
while(f>>n>>s){
if (n==0)add(s);
if (n==1)del(s);
if (n==2)g<<task2(s)<<'\n';
if (n==3)g<<task3(s)<<'\n';
}
return 0;
}