Pagini recente » Cod sursa (job #556648) | Cod sursa (job #3258112) | Cod sursa (job #3195487) | Cod sursa (job #1348117) | Cod sursa (job #2082275)
#include <bits/stdc++.h>
using namespace std;
#define ll long long
ifstream fin("trie.in");
ofstream fout("trie.out");
struct Node{
Node(){
for(int i = 0;i < 26;i++){
a[i] = NULL;
}
pref = end = 0;
}
Node *a[26];
int pref, end;
};
Node *root = new Node();
char s[25];
int n;
void add(Node *cr, int i){
if(cr->a[s[i] - 'a'] == NULL){
cr->a[s[i] - 'a'] = new Node();
}
cr->a[s[i] - 'a']->pref++;
if(i == n){
cr->a[s[i] - 'a']->end++;
}else{
add(cr->a[s[i] - 'a'], i + 1);
}
}
void del(Node *cr, int i){
if(i == n + 1){
return;
}
del(cr->a[s[i] - 'a'], i + 1);
cr->a[s[i] - 'a']->pref--;
cr->a[s[i] - 'a']->end--;
if(cr->a[s[i] - 'a']->pref == 0){
cr->a[s[i] - 'a'] = NULL;
delete cr->a[s[i] - 'a'];
}
}
int printAp(Node *cr, int i){
if(cr->a[s[i] - 'a'] == NULL){
return 0;
}
if(i == n){
return cr->a[s[i] - 'a']->end;
}
return printAp(cr->a[s[i] - 'a'], i + 1);
}
int longestPref(Node *cr, int i){
if(cr->a[s[i] - 'a'] == NULL){
return i - 1;
}
if(i == n){
return n;
}
return longestPref(cr->a[s[i] - 'a'], i + 1);
}
int main(){
int op;
while(fin >> op){
fin >> s + 1;
n = strlen(s + 1);
if(op == 0){
add(root, 1);
}else if(op == 1){
del(root, 1);
}else if(op == 2){
fout << printAp(root, 1) << '\n';
}else{
fout << longestPref(root, 1) << '\n';
}
}
return 0;
}