Pagini recente » Cod sursa (job #1328023) | Cod sursa (job #2132180) | Cod sursa (job #2652555) | Cod sursa (job #42962) | Cod sursa (job #459185)
Cod sursa(job #459185)
#include<cstring>
#include<fstream>
#include<cstdlib>
using namespace std;
ofstream fout("trie.out");
struct trie
{
char c;
int v, p;
trie *next[26];
bool fiu[26];
};
trie *t = new trie;
void insert(char* cuv);
void erase(char* cuv);
void writen(char* cuv);
void writep(char* cuv);
int main()
{
int op;
char* cuv;
t->v = t->p = 0;
for (int i = 0; i < 26; ++i)
t->fiu[i] = false;
ifstream fin("trie.in");
while (true)
{
fin >> op >> cuv;
switch (op)
{
case 0:
insert(cuv);
break;
case 1:
erase(cuv);
break;
case 2:
writen(cuv);
break;
case 3:
writep(cuv);
break;
};
if (fin.eof())
exit(0);
}
/*fin.close();
fout.close();
exit(0);*/
}
void insert(char* cuv)
{
trie *aux = new trie;
aux = t;
for (int i = 0; i < (int)strlen(cuv); ++i)
{
if (aux->fiu[cuv[i] - 'a'] == true)
{
aux = aux->next[cuv[i] - 'a'];
}
else
{
trie *nod = new trie;
nod->c = cuv[i];
nod->v = 0;
aux->next[cuv[i] - 'a'] = nod;
aux->fiu[cuv[i] - 'a'] = true;
aux = nod;
}
++aux->p;
}
++aux->v;
}
void erase(char* cuv)
{
trie *aux = new trie;
aux = t;
for (int i = 0; i < (int)strlen(cuv); ++i)
{
aux = aux->next[cuv[i] - 'a'];
--aux->p;
}
--aux->v;
}
void writen(char* cuv)
{
trie *aux = new trie;
aux = t;
for (int i = 0; i < (int)strlen(cuv); ++i)
aux = aux->next[cuv[i] - 'a'];
fout << aux->v << '\n';
}
void writep(char* cuv)
{
trie *aux = new trie;
aux = t;
int cont = 0, mx = 0;
for (int i = 0; i < (int)strlen(cuv); ++i)
{
++cont;
if (aux->fiu[cuv[i] - 'a'] == true)
aux = aux->next[cuv[i] - 'a'];
else
break;
if (aux->p > 0)
mx = cont;
}
fout << mx << '\n';
}