Cod sursa(job #2261534)

Utilizator NToniBoSSNicolae Tonitza NToniBoSS Data 16 octombrie 2018 12:30:27
Problema Potrivirea sirurilor Scor 62
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.89 kb
#include <cstdio>
#include <cstring>
#include <cctype>
#include <vector>
using namespace std;
char v[2000001];
int pee[2000001];
vector <int> rez;
int main()
{
    int i,n,z;
    char c;
    freopen("strmatch.in","r",stdin);
    freopen("strmatch.out","w",stdout);
    v[1]=getchar();
    n=1;
    while(isalpha(v[n]))
        v[++n]=getchar();
    --n;
    z=0;
    for(i=2; i<=n; i++)
    {
        while(z && v[z+1]!=v[i])
            z=pee[z];
        if(v[z+1]==v[i])
            pee[i]=++z;
    }
    z=0;
    c=getchar();
    i=1;
    while(isalpha(c))
    {
        while(z && v[z+1]!=c)
            z=pee[z];
        if(v[z+1]==c)
            ++z;
        if(z==n)
            rez.push_back(i-n);
        c=getchar();
        i++;
    }
    printf("%d\n",rez.size());
    for(i=0; i<rez.size() && i<1000; i++)
        printf("%d ",rez[i]);

    return 0;
}