Cod sursa(job #2576550)

Utilizator mitza23Mihai Grebla mitza23 Data 6 martie 2020 20:22:00
Problema Potrivirea sirurilor Scor 40
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.12 kb
#include <bits/stdc++.h>
#define MOD 1000003

using namespace std;

ifstream fi("strmatch.in");
ofstream fo("strmatch.out");

char text[2000000];
char pattern[1000000];
queue<int> q;
int main()
{
    fi.getline(pattern,2000000);
    fi.getline(text,2000000);

    int lp=strlen(pattern);
    int lt=strlen(text);

    long long put=1;
    long long pat=0;
    long long control=0;
    int rez=0;


    for(int i=0; i<lp; i++)
    {
        pat=(pat*26 + pattern[i])%MOD;
        control=(control*26 + text[i])%MOD;
        put%=MOD;
        put*=26;
    }
    put/=26;

    for(int i=0; i<=lt-lp; i++)
    {
        if(control==pat)
        {
            rez++;
            q.push(i);
        }
        if(i<lt-lp)
        {
            control=(26*(control-text[i]*put)+text[i+lp])%MOD;
            if(control<0)
            {
                control+=MOD;
            }
        }
    }
    fo<<rez<<'\n';
    int dim= q.size();
    dim=min(1000, dim);
    for(int i=0;i< dim;i++)
    {
        fo<<q.front()<<" ";
        q.pop();
    }

    fi.close();
    fo.close();
    return 0;
}