Pagini recente » Cod sursa (job #1883434) | Cod sursa (job #314554) | Cod sursa (job #2763744) | Cod sursa (job #2138672) | Cod sursa (job #1571961)
#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);
fscanf(fin, "%s", s2);
l = strlen(s);
for(i = 0; i < l; i++){
hs = hs + (prim * s[i]);
hs2 = hs2 + (prim * s2[i]);
prim *= 101;
}
if(hs == hs2){
v[p++] = 0;
}
prim /= 101;
L = strlen(s2);
i = l;
for(i; i < L; i++){
hs2 = ((hs2 - s2[i - l]) / 101) + (s2[i] * prim);
if(hs2 == hs){
v[p++] = i - l + 1;
}
}
fprintf(fout, "%d\n", p);
for(i = 0; i < p; i++)
fprintf(fout, "%d ", v[i]);
return 0;
}