Cod sursă (job #696401)

Utilizator avatar andrei0simion Andrei Simion andrei0simion IP ascuns
Problemă Bart (clasele 9-10) Compilator cpp-32 | 1,03 kb
Rundă Arhiva de probleme Status evaluat
Dată 16 feb. 2023 21:30:01 Scor 100
#include <iostream>
#include <fstream>

using namespace std;

int main()
{
    ifstream in("bart.in");
    cin.rdbuf(in.rdbuf());
    ofstream out("bart.out");
    cout.rdbuf(out.rdbuf());

    char sir[500000];
    int nrCaractere = 0;
    cin >> sir[nrCaractere];
    while (!cin.eof())
    {
        nrCaractere++;
        cin >> sir[nrCaractere];
    }
    sir[nrCaractere] = 0;
    //cout << sir << endl;
    //cout << nrCaractere << endl;

    int* pi = new int[nrCaractere];
    pi[0] = -1;
    //cout << pi[0] << " ";
    for (int i = 1; i < nrCaractere; i++)
    {
        pi[i] = pi[i - 1];
        while (pi[i] != -1 && sir[pi[i] + 1] != sir[i])
        {
            pi[i] = pi[pi[i]];
        }
        if (sir[pi[i] + 1] == sir[i])
            pi[i]++;
        //cout << pi[i] << " ";
    }
    //cout << endl;

    int lungimeMesaj = nrCaractere - 1 - pi[nrCaractere - 1];
    for (int i = 0; i < lungimeMesaj; i++)
    {
        cout << sir[i];
    }
    cout << endl;

    delete[] pi;
}