Pagini recente » Cod sursa (job #1449794) | Cod sursa (job #1958669) | Cod sursa (job #618485) | Cod sursa (job #2557109) | Cod sursa (job #2369205)
#include <bits/stdc++.h>
using namespace std;
ifstream in("trie.in");
ofstream out("trie.out");
struct Trie
{
int pre, nr, sons[30];
}v[200005];
string s;
int k;
void insertWord(string s)
{
int nod = 0;
for (int i = 0; i < s.size(); ++i)
{
int next = v[nod].sons[s[i] - 'a'];
if (next == 0)
v[nod].sons[s[i] - 'a'] = ++k;
nod = v[nod].sons[s[i] - 'a'];
v[nod].pre++;
}
v[nod].nr++;
}
void deleteWord(string s)
{
int nod = 0;
for (int i = 0; i < s.size(); ++i)
{
int next = v[nod].sons[s[i] - 'a'];
nod = next;
v[nod].pre--;
}
v[nod].nr--;
}
int cateCuvinte(string s)
{
int nod = 0;
for (int i = 0; i < s.size(); ++i)
{
int next = v[nod].sons[s[i] - 'a'];
if (next == 0)
return 0;
nod = next;
}
return v[nod].nr;
}
int prefix(string s)
{
int nod = 0;
for (int i = 0; i < s.size(); ++i)
{
int next = v[nod].sons[s[i] - 'a'];
nod = next;
if (v[nod].pre <= 0)
return i;
}
return s.size();
}
int main()
{
int p;
while (in >> p)
{
in >> s;
if (p == 0)
insertWord(s);
else if (p == 1)
deleteWord(s);
else if (p == 2)
out << cateCuvinte(s) << '\n';
else
out << prefix(s) << '\n';
}
return 0;
}