Pagini recente » Cod sursa (job #874038) | Cod sursa (job #984831) | Cod sursa (job #3353277) | Cod sursa (job #1124057) | Cod sursa (job #1572867)
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
string s;
int indice;
struct nod
{
int numarfii;
int innod;
int initializat;
nod* fii[26];
void initializeaza()
{
initializat = 1;
int i;
for (i = 0; i < 26; i++)
{
fii[i] = new nod;
fii[i]->initializat = 0;
}
numarfii = 0;
innod = 0;
}
};
nod initial;
nod* acum;
int main()
{
ifstream in("trie.in");
ofstream out("trie.out");
initial.initializeaza();
int x;
while (!in.eof())
{
in >> x;
in >> s;
indice = 0;
acum = &initial;
if (x == 0)
{
while (indice <s.size())
{
acum = acum->fii[s[indice] - 'a'];
if (acum->initializat == 0)
{
acum->initializeaza();
}
if (indice == s.length() - 1)
acum->innod++;
else
acum->numarfii++;
indice++;
}
}
else if (x == 1)
{
while (indice < s.size())
{
acum = acum->fii[s[indice] - 'a'];
if (acum->initializat == 0)
{
acum->initializeaza();
}
if (indice == s.length() - 1)
acum->innod--;
else
acum->numarfii--;
indice++;
}
}
else if (x == 2)
{
while (indice <= s.size())
{
acum = acum->fii[s[indice] - 'a'];
if (indice == s.length() - 1)
out<<acum->innod<<"\n";
indice++;
}
}
else if (x == 3)
{
while (indice < s.size())
{
acum = acum->fii[s[indice] - 'a'];
if (acum->initializat == 0)
{
acum->initializeaza();
out << indice+1;
break;
}
if (acum->numarfii == 0)
{
out << indice << "\n";
break;
}
indice++;
}
}
}
}