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