Pagini recente » Cod sursa (job #2484592) | Cod sursa (job #1086846) | Cod sursa (job #1085486) | Cod sursa (job #720930) | Cod sursa (job #2020574)
#include<bits/stdc++.h>
using namespace std;
struct Node {
int many, subMany;
char value;
map<char, Node*> next;
Node(char _value): value(_value) {
many = subMany = 0;
}
};
Node* root;
void addPath(string &w) {
Node *current = root;
for(auto it : w) {
current->subMany++;
if(!current->next[it]) {
current->next[it] = new Node(it);
}
current = current->next[it];
}
current->many++;
current->subMany++;
}
void deletePath(string &w) {
Node *current = root;
for(auto it : w) {
current->subMany--;
current = current->next[it];
}
current->many--;
current->subMany--;
}
int apparitions(string &w) {
Node *current = root;
for(auto it : w) {
if(!current->next[it]) {
return 0;
}
current = current->next[it];
}
return current->many;
}
int longestPath(string &w) {
Node *current = root;
int length = 0;
for(auto it : w) {
if(!current->next[it]) {
return length;
}
current = current->next[it];
if(!current->subMany) {
return length;
}
length++;
}
return length;
}
int main() {
freopen("trie.in","r",stdin);
freopen("trie.out","w",stdout);
int type;
string w;
root = new Node('$');
while(cin >> type >> w) {
switch(type) {
case 0:
addPath(w);
break;
case 1:
deletePath(w);
break;
case 2:
cout<<apparitions(w)<<'\n';
break;
case 3:
cout<<longestPath(w)<<'\n';
break;
}
}
return 0;
}