Pagini recente » Cod sursa (job #2198675) | Cod sursa (job #1819059) | Cod sursa (job #2377697) | Cod sursa (job #1889881) | Cod sursa (job #2391953)
#include <fstream>
#include <vector>
#include <string>
using namespace std;
ifstream fin("strmatch.in");
ofstream fout("strmatch.out");
int sizeA, num;
int *matches;
string a, b;
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)) {
matches[num++] = j;
}
}
int main() {
getline(fin, a);
getline(fin, b);
sizeA = a.size();
int n = b.size() - sizeA + 1;
num = 0;
matches = new int[n];
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);
}
}
fout << num << "\n";
n = num < 1000 ? num : 1000;
for (int i = 0; i < n; ++i) {
fout << matches[i] << " ";
}
}