Pagini recente » Cod sursa (job #2596744) | Cod sursa (job #1484770) | Cod sursa (job #2382353) | Cod sursa (job #2817645) | Cod sursa (job #2225866)
#pragma GCC optimize("O2")
#include <bits/stdc++.h>
using namespace std;
#define IOS ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);
ifstream fin("/home/mihai/Documents/c++/A/A.in");
ofstream fout("/home/mihai/Documents/c++/A/A.out");
const int N = 1e6;
int k = 0;
struct nod
{
int apps;
int prefix;
int abc ['z' - 'a' + 5];
}v[N];
void add(string s)
{
int nod = 0;
for(int i = 0; i < s.size(); i++)
{
int urm = v[nod].abc[s[i] - 'a'];
if(!urm)
{
urm = ++k;
v[nod].abc[s[i] - 'a'] = urm;
}
v[urm].prefix++;
nod = urm;
}
v[nod].apps++;
}
void del(string s)
{
int nod = 0;
for(int i = 0; i < s.size(); i++)
{
int urm = v[nod].abc[s[i] - 'a'];
v[urm].prefix--;
nod = urm;
}
v[nod].apps--;
}
void print_apps(string s)
{
int nod = 0;
for(int i = 0; i < s.size(); i++)
{
int urm = v[nod].abc[s[i] - 'a'];
if(!v[urm].prefix)
{
fout << 0 << '\n';
return ;
}
nod = urm;
}
fout << v[nod].apps << '\n';
}
void print_prefix(string s)
{
int nod = 0;
for(int i = 0; i < s.size(); i++)
{
int urm = v[nod].abc[s[i] - 'a'];
if(!v[urm].prefix)
{
fout << i << '\n';
return ;
}
nod = urm;
}
fout << s.size() << '\n';
}
main()
{
IOS
int op;
string s;
while(fin >> op)
{
fin >> s;
switch(op)
{
case 0: add(s); break;
case 1: del(s); break;
case 2: print_apps(s); break;
case 3: print_prefix(s); break;
}
}
}