Cod sursa(job #3344951)

Utilizator Sabin1133Padurariu Sabin Sabin1133 Data 7 martie 2026 01:12:18
Problema Potrivirea sirurilor Scor 16
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.96 kb
#include <iostream>

#define NMAX 2000005

int main()
{
    int n, m, cnt = 0;
    std::string t, p;
    int dfa[NMAX];
    int pos[NMAX];
    
    freopen("strmatch.in", "r", stdin);
    freopen("strmatch.out", "w", stdout);

    std::cin >> p >> t;

    m = p.length();
    n = t.length();

    for (int i = 1, j = 0; i < m && j < m - 1; ++i) {
        if (p[i] == p[j]) {
            dfa[i] = j + 1;

            ++j;
        } else {
            dfa[i] = 0;

            j = 0;
        }
    }

    for (int i = 0, j = 0; i < n && cnt < 1000; ++i) {
        if (t[i] != p[j] )
            if (j > 0)
                j = dfa[j - 1];

        if (t[i] == p[j] && j == m - 1) {
            pos[cnt++] = i - m + 1;

            if (j > 0)
                j = dfa[j - 1];
        }

        if (t[i] == p[j] && j < m - 1)
            ++j;
    }

    std::cout << cnt << '\n';

    for (int i = 0; i < cnt; ++i)
        std::cout << pos[i] << ' ';

    std::cout << '\n';

    return 0;
}