Pagini recente » Cod sursa (job #2548345) | Cod sursa (job #1766888) | Cod sursa (job #1829871) | Cod sursa (job #2890241) | Cod sursa (job #2844854)
#include <bits/stdc++.h>
using namespace std;
ifstream fin ("trie.in");
ofstream fout ("trie.out");
struct nod
{
int val;
nod *chr[26];
nod()
{
for (int i = 0; i < 26; i++)
chr[i] = nullptr;
val = 0;
}
}*root;
int cerinta;
string s;
void citire();
void adaug();
int sterg(nod *crt, int i);
int aparitii();
int lungime();
int main()
{
citire();
int ok =1;
return 0;
}
void citire()
{
root = new nod;
while (fin >> cerinta >> s)
{
if (cerinta == 0)
adaug();
else if (cerinta == 1)
sterg(root, 0);
else if (cerinta == 2)
fout << aparitii() << '\n';
else
fout << lungime() << '\n';
}
}
void adaug()
{
nod *crt = root;
for (int i = 0; i < s.size(); i++)
{
if (crt->chr[s[i]-'a'] == nullptr)
crt->chr[s[i]-'a'] = new nod;
crt = crt->chr[s[i]-'a'];
}
crt->val++;
}
int sterg(nod *crt, int i)
{
if (s.size() == i)
crt->val--;
if (i != s.size())
{
if (sterg(crt->chr[s[i]-'a'], i+1))
{
crt->chr[s[i]-'a'] = nullptr;
delete crt->chr[s[i]-'a'];
}
}
int cnt = 0;
for (int j = 0; j < 26; j++)
if (crt->chr[j] == nullptr)
cnt++;
if (cnt == 26 && crt->val == 0)
return 1;
return 0;
}
int aparitii()
{
nod *crt = root;
for (int i = 0; i < s.size(); i++)
{
if (crt->chr[s[i]-'a'] == nullptr)
return 0;
crt = crt->chr[s[i]-'a'];
}
return crt->val;
}
int lungime()
{
nod *crt = root;
for (int i = 0; i < s.size(); i++)
{
if (crt->chr[s[i]-'a'] == nullptr)
return i;
crt = crt->chr[s[i]-'a'];
}
return s.size();
}