Pagini recente » Cod sursa (job #447973) | Cod sursa (job #1067266) | Cod sursa (job #1707465) | Cod sursa (job #463793) | Cod sursa (job #2839923)
#include <bits/stdc++.h>
#define ALF 26
#define DimMax 201001
using namespace std;
ifstream fin ( "trie.in" );
ofstream fout ( "trie.out" );
int op, N;
string s;
int nxt[DimMax][ALF], ap[DimMax], nrcuv[DimMax];
void op0 ( string s )
{
int nod = 0;
for ( char c: s )
{
if ( nxt[nod][c - 'a'] == 0 )
{
nxt[nod][c - 'a'] = ++N;
}
nod = nxt[nod][c - 'a'];
ap[nod]++;
}
nrcuv[nod]++;
}
void op1 ( string s )
{
int nod = 0;
for ( char c: s )
{
nod = nxt[nod][c - 'a'];
ap[nod]--;
}
nrcuv[nod]--;
}
void op2 ( string s )
{
int nod = 0;
for ( char c: s )
{
int tmp = nxt[nod][c - 'a'];
if ( tmp == 0 || ap[tmp] <= 0 )
{
fout << 0 << '\n';
return;
}
nod = tmp;
}
fout << nrcuv[nod] << '\n';
}
void op3 ( string s )
{
int nod = 0; int lg = 0;
for ( char c: s )
{
int tmp = nxt[nod][c - 'a'];
if ( tmp == 0 || ap[tmp] <= 0 ) break;
nod = tmp;
lg++;
}
fout << lg << '\n';
}
int main()
{
int nr = 0;
while ( fin >> op >> s )
{
if ( op == 0 ) op0(s);
else if ( op == 1 ) op1(s);
else if ( op == 2 ) {op2(s); nr++;}
else {op3(s);nr++;}
}
return 0;
}