Cod sursa(job #2985470)

Utilizator MihaiZ777MihaiZ MihaiZ777 Data 26 februarie 2023 15:49:13
Problema Potrivirea sirurilor Scor 40
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.11 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <string>
using namespace std;

ifstream fin("strmatch.in");
ofstream fout("strmatch.out");

const int LIMIT = 1000;
int lps[4000005], num;
vector <int> solutions;
string a, b, s;

int main()
{
    fin >> a >> b;
    s = '$' + a + '$' + b;

    int sLen = s.length();
    int aLen = a.length();
    for (int i = 2; i < sLen; i++) {
        int currLetter = s[i];
        int currIdx = lps[i - 1];

        while (currIdx && currLetter != s[currIdx + 1]) {
            currIdx = lps[currIdx];
        }

        if (currLetter == s[currIdx + 1]) {
            currIdx++;
        }
            
        lps[i] = currIdx;

        for (int j = 1; j <= aLen; j++) {
            cout << lps[j] << ' ';
        }
        cout << '\n';

        if (currIdx == aLen) {
            num++;
            if (num <= LIMIT) {
                solutions.push_back(i - 2 * aLen - 1);
            }    
        }
    }
    
    fout << num << '\n';
    for(int x : solutions) {
        fout << x << ' ';
    }
        
    return 0;
}