Pagini recente » Cod sursa (job #570226) | Cod sursa (job #430429) | Cod sursa (job #926888) | Cod sursa (job #996356) | Cod sursa (job #1571803)
#include <stdio.h>
#include <string.h>
using namespace std;
FILE *fin = fopen("strmatch.in", "r");
FILE *fout = fopen("strmatch.out", "w");
char s[2000001],s2[2000001], c;
int v[2000000];
int main(){
int i, j, l, L, prim = 1, p = 0;
long long hs = 0, hs2 = 0;
fscanf(fin, "%s", s);
fscanf(fin, "%c", &c);
l = strlen(s);
for(i = 0; i < l; i++){
hs = hs + (prim * s[i]);
prim *= 101;
}
fscanf(fin, "%s", s2);
L = strlen(s2) - l + 1;
for(i = 0; i < L; i++){
hs2 = 0;
prim = 1;
for(j = 0; j < l; j++){
hs2 = hs2 + (prim * s2[i + j]);
prim *= 101;
}
printf("%d ", hs2);
if(hs == hs2){
v[p++] = i;
}
}
fprintf(fout, "%d\n", p);
for(i = 0; i < p; i++)
fprintf(fout, "%d ", v[i]);
return 0;
}