Pagini recente » Cod sursa (job #1426769) | Cod sursa (job #3281249) | Cod sursa (job #421985) | Cod sursa (job #1987992) | Cod sursa (job #1846033)
#include <iostream>
#include <fstream>
using namespace std;
ifstream ka("abc2.in");
ofstream ki("abc2.out");
string text, s;
int rezultat, sol;
struct nod
{
int aparitii, urmatoare;
nod* fii[26];
nod* precedent;
nod() {
aparitii = 0;
urmatoare = 0;
for(int i = 0; i < 26; i++)
fii[i] = NULL;
precedent = NULL;
}
};
void adaugare(const string &s, int poz, nod* n, int a)
{
if(a == 0)
n->urmatoare++;
if(poz == s.size())
{
if(a == 0)
n->aparitii++;
else if(a == 2)
rezultat = n->aparitii;
}
else if(n->fii[s[poz]-'a'] != NULL)
{
adaugare(s, poz + 1, n->fii[s[poz]-'a'], a);
}
else
{
if(a == 0)
{
nod* nn = new(nod);
nn->precedent = n;
n->fii[s[poz]-'a'] = nn;
adaugare(s, poz + 1, n->fii[s[poz]-'a'], a);
}
else if(a == 2)
rezultat = 0;
}
}
int main()
{
ka >> text;
nod* radacina = new(nod);
while(ka >> s)
adaugare(s, 0, radacina, 0);
string unul = text.substr(0, s.size());
adaugare(unul, 0, radacina, 2);
if(rezultat)
sol++;
for(int care = s.size() - 1; care <= text.size(); care++)
{
unul.erase(0, 1);
unul.push_back(text[care]);
adaugare(unul, 0, radacina, 2);
if(rezultat)
sol++;
}
ki << sol;
}