Pagini recente » Cod sursa (job #1402310) | Cod sursa (job #821137) | Cod sursa (job #1459390) | Cod sursa (job #125118) | Cod sursa (job #2154623)
#include <fstream>
#include <algorithm>
#include <cstring>
using namespace std;
ifstream cin("trie.in");
ofstream cout("trie.out");
int tip, lg;
char cuvant[30], litera;
struct Trie
{
int terminat;
int cate;
Trie *urm[30];
Trie()
{
for(int i=0; i <= 29; i++)
urm[i] = NULL;
terminat = 0;
cate = 0;
}
};
int main()
{
Trie *start;
start = new Trie;
while(cin >> tip >> cuvant)
{
if(tip == 0)
{
lg = strlen(cuvant);
Trie *poz;
poz = start;
for(int i=0; i < lg; i++)
{
litera = cuvant[i];
if(poz->urm[litera-'a'+1] == NULL)
{
poz->urm[litera-'a'+1] = new Trie;
}
poz = poz->urm[litera-'a'+1];
poz->cate++;
}
poz->terminat++;
}
else
if(tip == 1)
{
lg = strlen(cuvant);
Trie *poz;
poz = start;
for(int i=0; i < lg; i++)
{
litera = cuvant[i];
poz = poz->urm[litera-'a'+1];
poz->cate--;
}
poz->terminat--;
}
else
if(tip == 2)
{
lg = strlen(cuvant);
Trie *poz;
poz = start;
int i;
for(i=0; i < lg; i++)
{
litera = cuvant[i];
if(poz->urm[litera-'a'+1] == NULL)
break;
poz = poz->urm[litera-'a'+1];
}
if(i == lg)
cout << poz->terminat << '\n';
else
cout << 0 << '\n';
}
else
if(tip == 3)
{
lg = strlen(cuvant);
Trie *poz;
poz = start;
int i=0;
for(i=0; i < lg; i++)
{
litera = cuvant[i];
if(poz->urm[litera-'a'+1] == NULL || poz->urm[litera-'a'+1]->cate == 0)
break;
poz = poz->urm[litera-'a'+1];
}
cout << i << '\n';
}
}
}