Pagini recente » Cod sursa (job #3041788) | Cod sursa (job #2673658) | Cod sursa (job #273405) | Cod sursa (job #236139) | Cod sursa (job #2249648)
#include <fstream>
#include <cstring>
#include <iostream>
#include <string>
using namespace std;
ifstream fin ("trie.in");
ofstream fout ("trie.out");
const int CHAR = 30;
struct Trie{
int val;
int cuv;
Trie *next[CHAR];
};
Trie *T;
Trie *nod;
int n;
//char S[CHAR];
string S;
void Add();
void Del();
void Query();
void QueryP();
int main() {
int q;
T = new Trie;
char x;
while ( fin >> q) {
//memset(S,0,sizeof(S));
fin >> S;
n = S.size();
if ( q == 0)
Add();
else
if ( q == 1)
Del();
else
if ( q == 2)
Query();
else
QueryP();
}
}
void Add() {
nod = T;
for ( int i = 0; i < n; ++i) {
if ( nod -> next[S[i] - 'a'] == nullptr )
nod -> next[S[i] - 'a'] = new Trie;
nod = nod -> next[S[i] - 'a'];
nod -> val++;
if ( i == n - 1)
nod -> cuv++;
}
}
void Del() {
Trie *cop;
nod = T;
for ( int i = 0; i < n; ++i) {
cop = nod;
nod = nod->next[S[i]-'a'];
nod ->val --;
if ( nod->val == 0) {
cop -> next[S[i] -'a'] = nullptr;
break;
}
if ( i == n - 1)
nod ->cuv--;
}
}
void Query() {
nod = T;
for ( int i = 0; i < n; ++i) {
nod = nod->next[S[i] -'a'];
if ( nod == nullptr)
break;
}
if ( nod == nullptr)
fout << 0 << "\n";
else
fout << nod ->cuv << "\n";
}
void QueryP() {
nod = T;
int i = 0;
while ( nod != nullptr and i <= n){
nod = nod->next[S[i]-'a'];
++i;
}
fout << i - 1 << "\n";
}