Pagini recente » Cod sursa (job #2036872) | Cod sursa (job #2073928) | Cod sursa (job #542692) | Cod sursa (job #41534) | Cod sursa (job #1754479)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("trie.in");
ofstream fout("trie.out");
char c[50];
struct Nod
{
int nr, cnt;
Nod *leg[26];
};
Nod *L;
void Init()
{
int i;
L = new Nod;
L -> nr = 0;
L -> cnt = 0;
for(i = 0; i < 26; i++)
L -> leg[i] = NULL;
}
void InsCuv(const char c[])
{
int i, j, k;
Nod *p, *q;
p = L;
for(i = 0; c[i]; i++)
{
j = c[i] - 'a';
if(p -> leg[j] != NULL)
{
p -> cnt++;
p = p -> leg[j];
}
else
{
q = new Nod;
q -> nr = 0;
q -> cnt = 1;
for(k = 0; k < 26; k++)
q -> leg[k] = NULL;
p -> leg[j] = q;
p = q;
}
}
(p -> nr)++;
(p -> cnt)++;
}
void Sterge(const char c[])
{
int i, j;
Nod *p;
p = L;
for(i = 0; c[i]; i++)
{
j = c[i] - 'a';
(p -> cnt)--;
p = p -> leg[j];
}
(p -> nr)--;
(p -> cnt)--;
}
int NrAp(const char c[])
{
int i, j;
Nod *p;
p = L;
for(i = 0; c[i]; i++)
{
j = c[i] - 'a';
if(p -> leg[j] == NULL)
return 0;
p = p -> leg[j];
}
return p -> nr;
}
int Prefix(const char c[])
{
int i, j;
Nod *p;
int lung = 0;
p = L;
for(i = 0; c[i]; i++)
{
j = c[i] - 'a';
if(p -> leg[j] == NULL)
return lung;
lung++;
p = p -> leg[j];
if(p -> cnt == 0)
return lung - 1;
}
return lung;
}
void Citeste()
{
int op;
while(fin >> op >> c)
{
if(op == 0) InsCuv(c);
if(op == 1) Sterge(c);
if(op == 2) fout << NrAp(c) << "\n";
if(op == 3) fout << Prefix(c) << "\n";
}
fin.close();
}
int main()
{
Init();
Citeste();
return 0;
}