Pagini recente » Cod sursa (job #554175) | Cod sursa (job #2681057) | Cod sursa (job #531844) | Cod sursa (job #1700545) | Cod sursa (job #2211092)
#include <bits/stdc++.h>
#define nr1 666013
#define nr2 10003
using namespace std;
ifstream f("strmatch.in");
ofstream g("strmatch.out");
int n,m,h1,h2,x1,x2,p1,p2,i;
char a[2000005],b[2000005];
vector <int > sol;
int main()
{
f.getline(a,2000005);
n=strlen(a);
f.getline(b,2000005);
m=strlen(b);
for(i=0;i<n;i++)
{
h1=((h1*127)%nr1+(a[i]-'0'))%nr1;
h2=((h2*131)%nr2+(a[i]-'0'))%nr2;
x1=((x1*127)%nr1+(b[i]-'0'))%nr1;
x2=((x2*131)%nr2+(b[i]-'0'))%nr2;
}
p1=p2=1;
for(i=1;i<n;i++)
{
p1=(p1*127)%nr1;
p2=(p2*131)%nr2;
}
if(x1==h1 && x2==h2)
{
sol.push_back(0);
}
for(i=n;i<m;i++)
{
x1=((x1-((b[i-n]-'0')*p1)%nr1+nr1)*127+(b[i]-'0'))%nr1;
x2=((x2-((b[i-n]-'0')*p2)%nr2+nr2)*131+(b[i]-'0'))%nr2;
if(x1==h1 && x2==h2)
{
sol.push_back(i-n+1);
}
}
g<<sol.size()<<'\n';
if(sol.size()>1000)
{
for(i=0;i<1000;i++)
{
g<<sol[i]<<" ";
}
}
else
{
for(i=0;i<sol.size();i++)
{
g<<sol[i]<<" ";
}
}
return 0;
}