Pagini recente » Cod sursa (job #2611787) | Cod sursa (job #2873798) | Cod sursa (job #2668955) | Cod sursa (job #700647) | Cod sursa (job #2773323)
#include <bits/stdc++.h>
using namespace std;
ifstream fin ("strmatch.in"); ofstream fout("strmatch.out");
const int base = 131, mod = 1e9 + 7;
string a, b;
int A, B, masca = 1, i, e, ans[1005], sz;
int main()
{
fin >> a;
fin >> b;
///fout << a << " " << b << " " ;
sz = a.size();
for(i = 0; i < sz; i++){
A = (A * base + a[i] - 'A' + 1) % mod;
B = (B * base + b[i] - 'A' + 1) % mod;
}
for(int i = 1; i < sz; i++)
masca = (masca * base) % mod;
while(i < b.size())
{
int bct, btest;
bct = b[i - sz] - 'A' + 1;
btest = b[i + 1] - 'A' + 1;
if(A == B){
e++;
if(e <= 1000)
ans[e] = i - sz;
}
B = (B - (bct * masca)) % mod; /// elimin prima litera
if(B < 0) B += mod;
B = (B * base + b[i] - 'A' + 1) % mod; /// adaug urmatoarea litera
++i;
}
fout << e << '\n';
for(int j = 1; j <= e && j <= 1000; j++)
fout << ans[j] << " ";
return 0;
}