Pagini recente » Cod sursa (job #2631892) | Cod sursa (job #2001899) | Cod sursa (job #957531) | Cod sursa (job #555664) | Cod sursa (job #2029020)
# pragma GCC optimize("O3")
# include <bits/stdc++.h>
# define maxn 100005
# define ll long long
# define clock (clock() * 1000.0 / CLOCKS_PER_SEC)
# define rc(s) return cout << s,0
# define _ ios_base::sync_with_stdio(false);cin.tie(0);cerr.tie(0);cout.tie(0);
# define db(x) cerr << #x << " = " << x << '\n'
# define pb push_back
# define mp make_pair
# define sz(x) (int)((x).size())
//# define int ll
using namespace std;
int t[1 << 21];
int op;
string s;
map<int,int> nxt[1 << 21];
int idx;
void add(string s)
{
int curr = 0;
s += '{';
for(auto it : s)
{
if(!nxt[curr][it - 'a']) nxt[curr][it - 'a'] = ++idx;
curr = nxt[curr][it - 'a'];
t[curr]++;
}
}
void del(string s)
{
int curr = 0;
s += '{';
for(auto it : s)
{
curr = nxt[curr][it - 'a'];
t[curr]--;
}
}
int cnt(string s)
{
int curr = 0;
s += '{';
for(auto it : s)
{
curr = nxt[curr][it - 'a'];
if(!curr) return 0;
}
return t[curr];
}
int mxprf(string s)
{
int curr = 0;
int ans = 0;
for(auto it : s)
{
curr = nxt[curr][it - 'a'];
if(!curr) return ans;
ans++;
}
return ans;
}
int32_t main(){_
freopen("trie.in","r",stdin);
freopen("trie.out","w",stdout);
while(cin >> op >> s)
{
if(op == 0) add(s);
else if(op == 1) del(s);
else if(op == 2) cout << cnt(s) << '\n';
else cout << mxprf(s) << '\n';
}
}