Cod sursa(job #2439481)

Utilizator Dan_BDan Bugnariu Dan_B Data 16 iulie 2019 10:06:25
Problema Potrivirea sirurilor Scor 40
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.87 kb
#include <bits/stdc++.h>
using namespace std;
ifstream in("strmatch.in");
ofstream out("strmatch.out");

char a[2000010],b[2000010];
int p=31,mod=457231;

void citire()
{
    in>>a>>b;
}
void solv()
{
    int hasha=0,hashb=0,c=1;
    vector<int>sol;
    for(int i=0;i<strlen(a);i++)
    {
        hasha=(hasha*p+a[i])%mod;
        c=c*p%mod;
    }
    for(int i=0;i<strlen(a);i++)
    {
        hashb=hashb*p+b[i];
        hashb%=mod;
    }
    if(hasha==hashb)
    {
        sol.push_back(0);
    }
    for(int i=strlen(a);i<strlen(b);i++)
    {
        hashb=(mod+hashb*p-(b[i-strlen(a)]*c)%mod+b[i])%mod;
        if(hasha==hashb)
        {
            sol.push_back(i-strlen(a)+1);
        }
    }
    out<<sol.size()<<'\n';
    for(auto i:sol)
    {
        out<<i<<' ';
    }
}
int main()
{
    citire();
    solv();
    return 0;
}