Cod sursa(job #3159672)

Utilizator vladsoartavlad sofronea vladsoarta Data 21 octombrie 2023 19:39:47
Problema Potrivirea sirurilor Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.01 kb
#include <iostream>
#include <cstring>
#include <algorithm>
#define mod 15485863

using namespace std;

char pat[2000001],text[2000001];
int i,j,a,p,t,nr,ans[1000001];

int main()
{
    cin.getline(pat,2000001);
    cin.getline(text,2000001);

    int lpat = strlen(pat);
    int ltext=strlen(text);
    for(i=0; i<lpat; i++)
    p = (p+(int)((pat[i]-'A'+1)*(i+1)))%mod;

    for(i=0; i<lpat; i++)
    {
        t=(t+(int)((pat[i]-'A'+1)*i))%mod;
    }
    for(i=lpat-1; i<ltext-lpat; i++)
        {

            if(t==a)
        {
            for(j=0; j<lpat; j++)
            {
                if(pat[j]!=text[i+j])
                    break;
                if(j==lpat-1)
                {
                    nr++;
                    ans[nr]=i;
                }
            }


        }
        t=(t-((i)*(int)(text[i-1]-'A'+1)));

        t=(t+((i+lpat)*(int)(text[i+lpat-1]-'A'+1)))%mod;

    }

    for(i=1; i<=max(1000,nr); i++)
        cout<<ans[i]<<" ";

    return 0;
}