Pagini recente » Cod sursa (job #2895824) | Cod sursa (job #639845) | Cod sursa (job #1373539) | Cod sursa (job #2808857) | Cod sursa (job #1798536)
#include <iostream>
#include <string.h>
#include <fstream>
using namespace std;
ifstream f("strmatch.in");
ofstream g("strmatch.out");
char s[2000001],p[2000001];
int z,v[1001],q=100001,q1=100021,sq0,sq10,pq,pq1,b1=1,b2=1,nr,nr2,i,num;
int main()
{
f>>p;
f.get();
f>>s;
nr=strlen(p);nr2=strlen(s);
pq=p[0];sq0=s[0];
for(i=1;i<nr;i++)
{
pq=(pq*128+p[i])%q;
sq0=(sq0*128+s[i])%q;
b1=(b1*128)%q;
}
pq1=p[0];sq10=s[0];
for(i=1;i<nr;i++)
{
pq1=(pq1*128+p[i])%q1;
sq10=(sq10*128+s[i])%q1;
b2=(b2*128)%q1;
}
for(i=1;i<=nr2-nr+1;i++)
{if(pq==sq0)
if(pq1==sq10) {if(z<=999) v[++z]=i-1;num++;}
sq0=(((sq0+q-(s[i-1]*b1)%q)*128)+s[i+nr-1])%q;
sq10=((sq10+q1-(s[i-1]*b2)%q1)*128%q1+s[i+nr-1])%q1;
}
g<<num<<'\n';
for(i=1;i<=z;i++)
g<<v[i]<<' ';
return 0;
}