Pagini recente » Cod sursa (job #271828) | Cod sursa (job #2841652) | Cod sursa (job #2052246) | Cod sursa (job #3158006) | Cod sursa (job #2888864)
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
#define f first
#define s second
#define pb push_back
#define mp make_pair
#define pi pair<ll, ll>
#define sz(x) (int)((x).size())
#define all(a) (a).begin(), (a).end()
/*const ll maxn = 1e5;
int f[maxn],nf[maxn],inv[maxn];
const int M=998244353;
void init(){
inv[1]=1; for (int i=2;i<maxn;i++) inv[i]=M-1ll*(M/i)*inv[M%i]%M;
f[0]=nf[0]=1; for (int i=1;i<maxn;i++) f[i]=1ll*f[i-1]*i%M,nf[i]=1ll*nf[i-1]*inv[i]%M;
}
int C(int x,int y){return 1ll*f[x]*nf[y]%M*nf[x-y]%M;} */
const ll mod = 1e9+7;
ll n, k, m, mi, ma;
const ll N = 3e6 + 10;
struct point{
map<ll, ll> q;
ll count;
ll ch;
} a[N];
ll cur;
string s;
void add(ll i, ll now){
a[i].ch++;
if(now == s.size()) {
a[i].count++;
return;
}
if(a[i].q[s[now]] == 0){
a[i].q[s[now]] = cur;
cur++;
}
add(a[i].q[s[now]], now + 1);
}
void remove(ll i, ll now){
a[i].ch--;
if(now == s.size()){
a[i].count--;
return;
}
remove(a[i].q[s[now]], now + 1);
}
ll numara(ll i, ll now){
if(now == s.size()) return a[i].count;
return numara(a[i].q[s[now]], now + 1);
}
ll search(ll i, ll now){
if(a[i].ch == 0) return max(0ll, now - 1);
if(now == s.size()) return now;
if(a[i].q[s[now]] == 0) return now;
return search(a[i].q[s[now]], now + 1);
}
void solve(){
ifstream cin("trie.in");
ofstream cout("trie.out");
cur = 2;
ll x;
while(cin >> x >> s){
if(x == 0) add(1, 0);
if(x == 1) remove(1, 0);
if(x == 2) cout << numara(1, 0) << "\n";
if(x == 3) cout << search(1, 0) << "\n";
}
}
int main(){
ios::sync_with_stdio(0);
cin.tie(0);
//init();
int t=1;
//cin >> t;
while(t--) solve();
return 0;
}