Pagini recente » Cod sursa (job #770486) | Cod sursa (job #1832023) | Cod sursa (job #1754252) | Cod sursa (job #1647038) | Cod sursa (job #2487014)
#include <bits/stdc++.h>
using namespace std;
#pragma GCC optimize("O3")
#pragma GCC optimize("Ofast")
ifstream in("trie.in");
ofstream out("trie.out");
struct node {
node* mp[27];
int signs = 0, exists = 0;
};
int main()
{
//cout << "Hello world!" << endl;
node root;
int op; string cnt;
while(in >> op >> cnt) {
if(op == 0) {
node *self = &root;
for(int i = 0; i < cnt.size(); i++) {
self = self->mp[cnt[i] - 'a'];
self->exists++;
}
self->signs++;
}
if(op == 1) {
node *self = &root;
for(int i = 0; i < cnt.size(); i++) {
self = (self->mp[cnt[i] - 'a']);
self->exists--;
}
self->signs--;
}
if(op == 2) {
node *self = &root;
for(int i = 0; i < cnt.size(); i++) {
self = (self->mp[cnt[i] - 'a']);
}
out << self->signs << endl;
}
if(op == 3) {
node *self = &root;
int len = 0;
for(; len < cnt.size() && (self->mp[cnt[len]])->exists; len++) {
node *next = self->mp[cnt[len]-'a'];
if(next->exists) {
self = next;
}
}
out << len << endl;
}
}
return 0;
}