Pagini recente » Cod sursa (job #2762195) | Cod sursa (job #836607) | Cod sursa (job #2688988) | Cod sursa (job #1691355) | Cod sursa (job #2391968)
#include <string>
using namespace std;
int sizeA, num;
int matches[1000];
char a[2000000], b[2000000];
bool Check_Match(int j) {
for (int i = 0; i < sizeA; ++i) {
if (a[i] != b[j++]) {
return false;
}
}
return true;
}
void Try_Match(int j) {
if (Check_Match(j)) {
if (num < 1000) {
matches[num] = j;
}
++num;
}
}
int main() {
freopen("strmatch.in", "rt", stdin);
freopen("strmatch.out", "wt", stdout);
scanf("%s %s", a, b);
sizeA = strlen(a);
int n = strlen(b) - sizeA + 1;
num = 0;
long long s = 0, z = 0;
for (int i = 0; i < sizeA; ++i) {
s += int(a[i]);
z += int(b[i]);
}
Try_Match(0);
for (int i = 1, j = sizeA; i < n; ++i) {
z = z - int(b[i - 1]) + int(b[j++]);
if (z == s) {
Try_Match(i);
}
}
printf("%d\n", num);
n = num < 1000 ? num : 1000;
for (int i = 0; i < n; ++i) {
printf("%d ", matches[i]);
}
}