Pagini recente » Cod sursa (job #1504467) | Cod sursa (job #1504493) | Cod sursa (job #218663) | Cod sursa (job #2040348) | Cod sursa (job #2053019)
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("trie.in");
ofstream fout("trie.out");
typedef struct nod {struct nod *fiu[27];int terminal;int dus;int trecere;} NOD, *TRIE;
int best, i;
void adauga(TRIE &T, char *p)
{
if(T == NULL)
{
T = new NOD;
for(int i = 0; i <= 25; i++)
T->fiu[i] = NULL;
T -> trecere = 0;
T -> dus = 0;
adauga(T,p);
}
else
{
T -> dus = T -> dus + 1;
if((*p) == '\0')
{
T -> trecere = (T -> trecere) + 1;
}
else adauga(T->fiu[(*p) - 'a'], p + 1);
}
}
void sterge(TRIE &T, char *p)
{
T -> dus = T -> dus - 1;
if((*p) == '\0')
{
T -> trecere = (T -> trecere) - 1;
}
else sterge(T->fiu[(*p) - 'a'], p + 1);
}
void cauta(TRIE &T, char *p)
{
if(T == NULL)
{
fout << 0 << '\n';
return;
}
if((*p) == '\0')
{
fout << T -> trecere << '\n';
}
else cauta(T->fiu[(*p) - 'a'], p + 1);
}
void cautpr(TRIE &T, char *p)
{
if(T == NULL)
{
fout << best - 1 << '\n';
return;
}
if(T -> dus >= 1)best++;
if((*p) == '\0')
{
fout << best - 1<< '\n';
}
else
cautpr(T->fiu[(*p) - 'a'], p + 1);
}
char cuv[25];
int op;
TRIE T = NULL;
int main()
{
while(fin >> op >> cuv)
{
i++;
//cout << op <<" " << cuv << '\n';
if(op == 0)
{
adauga(T, cuv);
}
else if(op == 1)
{
sterge(T, cuv);
}
else if(op == 2)
{
cauta(T, cuv);
}
else if(op == 3)
{
best = 0;
cautpr(T, cuv);
}
}
return 0;
}