Pagini recente » Cod sursa (job #743541) | Cod sursa (job #2887551) | Cod sursa (job #2136200) | Cod sursa (job #2030580) | Cod sursa (job #2746221)
#include <bits/stdc++.h>
using namespace std;
#define pb push_back
#define mp make_pair
#define all(x) (x).begin(), (x).end()
#define imax INT_MAX
#define llmax LLONG_MAX
#define sz(x) (int((x).size()))
#define start ios_base::sync_with_stdio(false), cin.tie(0)
#define finish fin.close(), fout.close()
using ll = long long;
using uint = unsigned int;
const string filename = "trie";
fstream fin(filename + ".in");
ofstream fout(filename + ".out");
char s[55];
struct Nod
{
int nr, cnt;
Nod *fii[26];
Nod()
{
nr = cnt = 0;
for(int i = 0; i < 26; ++i)
fii[i] = NULL;
}
};
Nod *r = new Nod;
void ins(char c[])
{
int val;
Nod *p, *q;
p = r;
for(int i = 0; c[i]; ++i)
{
val = c[i] - 'a';
if(p -> fii[val] != NULL)
{
p = p -> fii[val];
p -> cnt++;
}
else
{
q = new Nod;
q -> cnt = 1;
p -> fii[val] = q;
p = q;
}
}
p -> nr++;
p -> cnt++;
}
void dele(char c[])
{
int val;
Nod *p;
p = r;
for(int i = 0; c[i]; ++i)
{
val = c[i] - 'a';
p = p -> fii[val];
p -> cnt--;
}
p -> nr--;
p -> cnt--;
}
int nrap(char c[])
{
int val;
Nod *p;
p = r;
for(int i = 0; c[i]; ++i)
{
val = c[i] - 'a';
if(p -> fii[val] == NULL)
return 0;
p = p -> fii[val];
}
return p -> nr;
}
int pref(char c[])
{
int val, ans = 0;
Nod *p;
p = r;
for(int i = 0; c[i]; ++i)
{
val = c[i] - 'a';
if(p -> fii[val] == NULL)
return ans;
p = p -> fii[val];
if(p -> cnt == 0)
return ans;
ans++;
}
return ans;
}
int main()
{
start;
short op;
while(fin >> op >> s)
{
if(op == 0)
ins(s);
else if(op == 1)
dele(s);
else if(op == 2)
fout << nrap(s) << '\n';
else fout << pref(s) << '\n';
}
finish;
return 0;
}