Cod sursa(job #1468966)

Utilizator pepsiM4A1Ozturk Arif pepsiM4A1 Data 7 august 2015 13:27:37
Problema Potrivirea sirurilor Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.09 kb
#include <cstdio>
#include <vector>
#define LMAX 2000007
#define MOD 666013
using namespace std;
char a[LMAX],b[LMAX];
int p[LMAX];
vector<int> h1[MOD];
int main()
{
    freopen ("strmatch.in","r",stdin);
    freopen ("strmatch.out","w",stdout);
    char ch;
    int p1=0;
    while(1)
    {
        scanf("%c",&ch);
        if(ch=='\n') break;
        a[++p1]=ch;
    }
    p[0]=1;
    for(int i=1;i<p1;i++)
    {
        p[i]=p[i-1]*26;
        p[i]%=MOD;
    }
    int val=0,key=0;
    for(int i=1;i<=p1;i++)
    {
        scanf("%c",&b[i]);
        val+=p[p1-i]*(a[i]-'A');
        val%=MOD;
        key+=p[p1-i]*(b[i]-'A');
        key%=MOD;
    }
    h1[key].push_back(0);
    for(int i=p1+1;;i++)
    {
        scanf("%c",&ch);
        if(feof(stdin)) break;
        b[i]=ch;
        key=key-(p[p1-1]*(b[i-p1]-'A')%MOD);
        key*=26;
        key%=MOD;
        key+=p[0]*(b[i]-'A');
        h1[key].push_back(i-p1);
    }
    int ss=h1[val].size();
    printf("%d\n",ss);
    if(ss>1000) ss=1000;
    for(int i=0;i<ss;i++) printf("%d ",h1[val][i]);
}