Pagini recente » Cod sursa (job #1248603) | Cod sursa (job #1264900) | Cod sursa (job #1379686) | Cod sursa (job #502082) | Cod sursa (job #2241486)
#include <fstream>
#include <cstring>
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];
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 >> x;
fin >> ( S + 1);
n = strlen(S + 1);
//cout << (S+ 1 );
if ( q == 0)
Add();
else
if ( q == 1)
Del();
else
if ( q == 2)
Query();
else
QueryP();
}
}
void Add() {
nod = T;
for ( int i = 1; 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)
nod -> cuv++;
}
}
void Del() {
Trie *cop;
nod = T;
for ( int i = 1; 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)
nod ->cuv--;
}
}
void Query() {
nod = T;
for ( int i = 1; 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 = 1;
while ( nod != nullptr and i <= n){
nod = nod->next[S[i]-'a'];
++i;
}
fout << i - 1 << "\n";
}