Pagini recente » Cod sursa (job #550558) | Cod sursa (job #938439) | Cod sursa (job #3261585) | Cod sursa (job #3229607) | Cod sursa (job #1651989)
#include <stdio.h>
#include <string.h>
#define MAX 2000001
using namespace std;
char a[MAX], b[MAX];
int n, m, p[MAX], nr, sol[1001];
int main()
{
int i = 0, k = 0;
freopen("strmatch.in","r",stdin);
freopen("strmatch.out","w",stdout);
a[0]=b[0] = ' ';
scanf("%s",a+1); n = strlen(a);
scanf("%s",b+1); m = strlen(b);
for(i = 2; i <= n; i++)
{
while(k && a[k+1] != a[i]) k = p[k];
if(a[k+1] == a[i]) k++;
p[i] = k;
}
k = 0;
for(i = 1; i <= m; i++)
{
while(k && a[k+1] != b[i]) k = p[k];
if(a[k+1] == b[i]) k++;
if (k == n - 1)
{
nr++;
if(nr <= 1000) sol[nr] = i - n + 1;
}
}
printf("%d\n",nr);
if(nr > 1000) nr = 1000;
for(i = 1;i <= nr; i++) printf("%d ",sol[i]);
return 0;
}