Cod sursa(job #1846033)

Utilizator Vally77FMI Calinescu Valentin Gelu Vally77 Data 12 ianuarie 2017 02:50:19
Problema Abc2 Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.41 kb
#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;
}