Pagini recente » Cod sursa (job #1209724) | Cod sursa (job #1193121) | Cod sursa (job #2952133) | Cod sursa (job #146033) | Cod sursa (job #1484282)
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <ctime>
#include <cmath>
#include <algorithm>
#include <vector>
#include <queue>
#include <deque>
#define INF ( (1 << 30) - 1 + (1 << 30) )
#define mod 666013
using namespace std;
int n, m, i, k, q, r[1005], pi[2000005];
char a[2000005], b[2000005];
int main()
{
freopen("strmatch.in", "r", stdin);
freopen("strmatch.out", "w", stdout);
gets(a + 1); n = strlen(a + 1);
gets(b + 1); m = strlen(b + 1);
k = 0;
pi[1] = 0;
for(i = 2; i <= n; i++)
{
while(k > 0 && a[k + 1] != a[i])
k = pi[k];
if(a[k + 1] == a[i])
k++;
pi[i] = k;
}
k = 0;
for(i = 1; i <= m; i++)
{
while(k > 0 && a[k + 1] != b[i])
k = pi[k];
if(a[k + 1] == b[i])
k++;
if(k == n)
{
q++;
if(q <= 1000)
r[q] = i - n;
}
}
printf("%d\n", q);
if(q > 1000)
q = 1000;
for(i = 1; i <= q; i++)
printf("%d ", r[i]);
return 0;
}