Pagini recente » Cod sursa (job #2673477) | Cod sursa (job #3212888) | Cod sursa (job #98821) | Cod sursa (job #391541) | Cod sursa (job #978901)
Cod sursa(job #978901)
#include <fstream>
#include <cstring>
#define mod1 666013
#define mod2 10003
using namespace std;
int na,nb,i,sol[2000001],val1,val2,txt1,txt2,baza1,baza2,ind;
char a[2000001],b[2000001];
int main()
{
ifstream f("strmatch.in");
ofstream g("strmatch.out");
f.get(a,2000001);
f.get();
f.get(b,2000001);
f.get();
na=strlen(a);int x=0;
nb=strlen(b);baza1=1;baza2=1;
for (i=0;i<na;i++)
{
val1=(val1*101%mod1+b[i])%mod1;
val2=(val2*109%mod2+b[i])%mod2;
txt1=(txt1*101%mod1+a[i])%mod1;
txt2=(txt2*109%mod2+a[i])%mod2;
if(i!=0)
{
baza1=(baza1*101)%mod1;
baza2=(baza2*109)%mod2;
}
} ind=0;
if (txt1==val1 && txt2==val2) sol[++ind]=0,x++;
for (i=na;i<nb;i++)
{
val1 = ( (val1 - (b[ i - na]*baza1)% mod1 + mod1)*101 + b[i])%mod1;
val2 = ( (val2 - (b[ i - na]*baza2)% mod2 + mod2)*109 + b[i])%mod2;
if (val1==txt1 && val2==txt2)
sol[++ind]=i-na+1,x++;
}
g<<x<<'\n';
for (i=1;i<=min(1000,ind);i++) g<<sol[i]<<" ";
f.close();
g.close();
return 0;
}