Pagini recente » Cod sursa (job #2248679) | Cod sursa (job #2938036) | Cod sursa (job #445360) | Cod sursa (job #2728957) | Cod sursa (job #1982467)
#include <iostream>
#include<stdio.h>
#include<string.h>
char s1[2000000], s2[2000000], vp[2000000];
using namespace std;
int main() {
FILE *fin, *fout;
int prod, nr, m1, n1, n2, i, f, p, nr1, rrr, x, y, st, nrr;
char c;
fin=fopen("strmatch.in", "r");
fout=fopen("strmatch.out", "w");
fscanf( fin, "%s", s1);
n1=strlen(s1);
fscanf( fin, "%s", s2);
n2=strlen(s2);
nrr=0;
m1=666013;
nr1=0;
st=1;
for(i=0;i<n1;i++) {
c=s1[i];
if(c>='a' && c<='z') {
f=c-'a';
}
if(c>='A' && c<='Z') {
f=c-'A'+26;
}
if(c>='0' && c<='9') {
f=c-'0'+52;
}
prod=1;
for(p=1;p<=(n1-i-1);p++) {
prod=(prod*62)%m1;
}
if(st==1) {
rrr=prod;
st=0;
}
nr1=(nr1+f*prod)%m1;
}
nr=0;
for(i=0;i<n1;i++) {
c=s2[i];
if(c>='a' && c<='z') {
f=c-'a';
}
if(c>='A' && c<='Z') {
f=c-'A'+26;
}
if(c>='0' && c<='9') {
f=c-'0'+52;
}
prod=1;
for(p=1;p<=(n1-i-1);p++) {
prod=(prod*62)%m1;
}
nr=(nr+f*prod)%m1;
}
for(i=n1;i<n2;i++) {
c=s2[i-n1];
if(c>='a' && c<='z') {
x=c-'a';
}
if(c>='A' && c<='Z') {
x=c-'A'+26;
}
if(c>='0' && c<='9') {
x=c-'0'+52;
}
c=s2[i];
if(c>='a' && c<='z') {
y=c-'a';
}
if(c>='A' && c<='Z') {
y=c-'A'+26;
}
if(c>='0' && c<='9') {
y=c-'0'+52;
}
nr=(((nr+m1-x*rrr)*62)%m1+y)%m1;
if(nr==nr1) {
nrr++;
vp[nrr]=i-n1+1;
}
}
fprintf( fout, "%d\n", nrr);
for(i=1;i<=nrr;i++) {
fprintf( fout, "%d ", vp[i]);
}
fclose( fin );
fclose( fout );
return 0;
}