Pagini recente » civilizatie | Cod sursa (job #2461990) | Cod sursa (job #3196606) | Cod sursa (job #675623) | Cod sursa (job #2192498)
#include <fstream>
#include <vector>
#include <cstring>
using namespace std;
ifstream f("trie.in");
ofstream g("trie.out");
const int NMAX = 2e6 + 3;
struct
{
int pre, cuv;
int son[33];
}t[NMAX];
int nr;
void Adauga(char cuvant[])
{
int nod = 0;
for(int i = 0; i < strlen(cuvant); i++)
{
int urm = t[nod].son[cuvant[i] - 'a'];
if(!urm)
{
urm = ++nr;
t[nod].son[cuvant[i] - 'a'] = urm;
}
t[urm].pre++;
nod = urm;
}
t[nod].cuv++;
}
void Sterge(char cuvant[])
{
int nod = 0;
for(int i = 0; i < strlen(cuvant); i++)
{
int urm = t[nod].son[cuvant[i] - 'a'];
t[urm].pre--;
nod = urm;
}
--t[nod].cuv;
}
void NAparitii(char cuvant[])
{
int nod = 0;
int urm;
for(int i = 0; i < strlen(cuvant); i++)
{
urm = t[nod].son[cuvant[i] - 'a'];
if(!t[urm].pre)
{
g << "0\n";
return;
}
nod = urm;
}
g << t[urm].cuv << "\n";
}
void Prefix(char cuvant[])
{
int nod = 0;
for(int i = 0; i < strlen(cuvant); i++)
{
int urm = t[nod].son[cuvant[i] - 'a'];
if(!t[urm].pre)
{
g << i << "\n";
return;
}
nod = urm;
}
g << strlen(cuvant) << "\n";
}
void Citire()
{
int cerinta;
char cuvant[1000];
while(f >> cerinta >> cuvant)
{
if(cerinta == 0)
Adauga(cuvant);
else
if(cerinta == 1)
Sterge(cuvant);
else
if(cerinta == 2)
NAparitii(cuvant);
else
Prefix(cuvant);
}
}
int main()
{
Citire();
}