Cod sursa(job #2728433)

Utilizator vlad082002Ciocoiu Vlad vlad082002 Data 23 martie 2021 11:39:23
Problema Potrivirea sirurilor Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.83 kb
#include <bits/stdc++.h>
using namespace std;

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

int main() {
    string a, b;
    fin >> a >> b;
    cout << a << '\n' << b << '\n';
    vector<int> pi(a.length()+5, 0), ans;

    int nr = 0;
    for(int i = 1; i < a.length(); i++) {
        pi[i] = pi[i-1];
        while(pi[i] > 0 && a[pi[i]] != a[i]) {
            pi[i] = pi[pi[i]-1];
        }
        if(a[pi[i]] == a[i]) pi[i]++;
    }

    int c = 0;
    for(int i = 0; i < b.length(); i++) {
        while(c > 0 && a[c] != b[i])
            c = pi[c-1];
        if(a[c] == b[i]) c++;
        if(c == a.length()) {
            nr++;
            if(ans.size() < 1000)
                ans.push_back(i-a.length()+1);
        }
    }
    fout << nr << '\n';
    for(auto x: ans) fout << x << ' ';

}