Cod sursa(job #2911083)

Utilizator MrPuzzleDespa Fabian Stefan MrPuzzle Data 26 iunie 2022 18:57:53
Problema Potrivirea sirurilor Scor 0
Compilator cpp-64 Status done
Runda 3_iulie Marime 0.88 kb
#include <bits/stdc++.h>
using namespace std;

ifstream f("strmatch.in");
ofstream g("strmatch.out");

int asize,bsize,p[DIM+5];
char a[DIM+5],b[DIM+5];
int solk=0,sol[1005];
int main(){
    f>>(a+1);
    asize = strlen(a+1);
    f>>(b+1);
    bsize = strlen(b+1);
    int l=0;
    for(int i=2;i<=asize;i++){
        if(l!=0&&a[i]!=a[l+1]){
            l = p[l];
        }
        if(a[i] == a[l+1]){
            l++;
        }
        p[i] = l;
    }
    l=0;
    for(int i=1;i<=bsize;i++){
        if(l!=0&&b[i]!=a[l+1]){
            l = p[l];
        }
        if(b[i] == a[l+1]){
            l++;
        }
        if(l == asize){
            if(solk<=1000){
                sol[++solk]=i-asize;
            }
            l = p[l];
        }
    }
    g<<solk<<'\n';
    for(int i=1;i<=min(solk, 1000);i++){
        g<<sol[i]<<" ";
    }
    return 0;
}