Pagini recente » Cod sursa (job #2664192) | Cod sursa (job #553939) | Cod sursa (job #1502552) | Cod sursa (job #2074637) | Cod sursa (job #2207154)
#include <fstream>
#include <string.h>
using namespace std;
char a[2000005], b[2000005];
int af[2000005];
int has1, has2, hbs1, hbs2, c=0, p=1;
ifstream f("strmatch.in");
ofstream g("strmatch.out");
/*bool ok(int i)
{
for(int j=0; j<strlen(b); j++)
if(b[j]!=a[i+j]) return 0;
return 1;
} */
int main()
{
f>>b;
f>>a;
for(int i=0; i<strlen(b); i++)
{hbs1=((hbs1*73)+b[i])%100007;
hbs2=((hbs2*73)+b[i])%100021;
has1=((has1*73)+a[i])%100007;
has2=((has2*73)+a[i])%100021;
if(i) p=(p*73);
if(i!=(strlen(b)-1)) p=p%101;}
g<<hbs1<<" "<<hbs2<<'\n';
for(int i=0; i<=strlen(a)-strlen(b); i++)
{
if(has1==hbs1 && has2==hbs2)
{c++; af[c]=i;}
has1=((has1+100007-((a[i]*(p))%100007))*73+a[i+strlen(b)])%100007;
has2=((has2+100021-((a[i]*(p))%100021))*73+a[i+strlen(b)])%100021;
g<<has1<<" "<<has2<<" ";
}
g<<c<<'\n';
for(int i=1; i<=c; i++) g<<af[i]<<" ";
return 0;
}