Pagini recente » Cod sursa (job #2341934) | tema | Cod sursa (job #1913118) | Cod sursa (job #3135310) | Cod sursa (job #250794)
Cod sursa(job #250794)
#include <stdio.h>
#include <string.h>
#define Nmax 2000100
char a[Nmax], b[Nmax];
int n,m, pi[Nmax], nr, p[1024];
int main()
{
freopen("strmatch.in","r",stdin);
freopen("strmatch.out","w",stdout);
fgets(a+1,Nmax,stdin);
fgets(b+1,Nmax,stdin);
while (a[++n] != '\n');--n;
while (b[++m] != '\n');--m;
int tmp=0;
for (int i=2;i<=n;++i)
{
while (a[i] != a[tmp+1] && tmp > 0) tmp = pi[tmp];
if (a[tmp+1] == a[i]) ++tmp;
pi[i] = tmp;
}
tmp=0;
for (int i=1;i<=m;++i)
{
while (tmp > 0 && a[tmp+1] != b[i]) tmp = pi[tmp];
if (a[tmp+1] == b[i]) ++tmp;
if (tmp == n)
{
++nr;
if (nr<=1000) p[nr] = i-n;
}
}
printf("%d\n", nr);
for (int i=1;i<=nr && i<=1000;++i)
printf("%d ", p[i]);
printf("\n");
return 0;
}