Pagini recente » Cod sursa (job #1916988) | Cod sursa (job #2388184) | Cod sursa (job #2878929) | Cod sursa (job #938365) | Cod sursa (job #2762111)
#include <bits/stdc++.h>
using namespace std;
ifstream fin ("trie.in");
ofstream fout ("trie.out");
struct nod_arbore
{
nod_arbore *litere[26];
nod_arbore *tata;
int nr_fii;
int nr_aparitii_cuvant;
};
void initializare_nod_arbore_nou (nod_arbore *oarecare)
{
for (int i=0; i<26; i++)
oarecare->litere[i] = NULL;
oarecare->tata = NULL;
oarecare->nr_fii = 0;
oarecare->nr_aparitii_cuvant = 0;
}
int main()
{
int x; char cuvant[30];
nod_arbore *R = new nod_arbore;
initializare_nod_arbore_nou(R);
while (fin >> x >> cuvant)
{
nod_arbore *curent = R;
if (x==0)
{
int lungime_cuvant = strlen(cuvant);
for (int i=0; i<lungime_cuvant; i++)
{
int corespondent_litera = int(cuvant[i])-97;
if (curent->litere[corespondent_litera]==NULL)
{
curent->litere[corespondent_litera] = new nod_arbore;
(curent->nr_fii)++;
initializare_nod_arbore_nou(curent->litere[corespondent_litera]);
(curent->litere[corespondent_litera])->tata = curent;
curent = curent->litere[corespondent_litera];
}
else
curent = curent->litere[corespondent_litera];
}
(curent->nr_aparitii_cuvant)++;
}
else if (x==1)
{
int lungime_cuvant = strlen(cuvant);
for (int i=0; i<lungime_cuvant; i++)
{
int corespondent_litera = int(cuvant[i])-97;
curent = curent->litere[corespondent_litera];
if (curent==NULL)
break;
}
if (curent==NULL)
break;
if (curent->nr_aparitii_cuvant>1)
(curent->nr_aparitii_cuvant)--;
else if (curent->nr_aparitii_cuvant==1)
{
int j = strlen(cuvant)-1;
(curent->nr_aparitii_cuvant)--;
while (curent->nr_aparitii_cuvant==0 && curent->nr_fii==0 && curent->tata!=NULL)
{
int corespondent_litera = int(cuvant[j])-97;
nod_arbore *auxiliar = curent;
curent = curent->tata;
(curent->nr_fii)--;
curent->litere[corespondent_litera] = NULL;
delete auxiliar;
j--;
}
}
}
else if (x==2)
{
int lungime_cuvant = strlen(cuvant);
for (int i=0; i<lungime_cuvant; i++)
{
int corespondent_litera = int(cuvant[i])-97;
curent = curent->litere[corespondent_litera];
if (curent==NULL)
{
fout << 0 << '\n';
break;
}
}
if (curent!=NULL)
fout << curent->nr_aparitii_cuvant << '\n';
}
else
{
int lungime_cuvant = strlen(cuvant);
for (int i=0; i<lungime_cuvant; i++)
{
int corespondent_litera = int(cuvant[i])-97;
curent = curent->litere[corespondent_litera];
if (curent==NULL)
{
fout << i << '\n';
break;
}
}
if (curent!=NULL)
fout << lungime_cuvant << '\n';
}
}
return 0;
}