Pagini recente » Cod sursa (job #2632807) | Cod sursa (job #1675471) | Cod sursa (job #1447913) | Cod sursa (job #1675537) | Cod sursa (job #2289234)
#include <cstdio>
#include <cstring>
using namespace std;
int p[2000001];
char a[2000001];
char b[2000001];
int n, m;
void formp()
{
int i=0;
int j=-1;
p[0] = -1;
while(i < m)
{
while(j >= 0 && p[i] != p[j])
j = p[j];
i++;
j++;
p[i] = j;
}
}
void kmp()
{
int i=0, j=0;
while(i<n)
{
while(j >=0 && b[i] != a[j])
j = p[j];
i++;
j++;
if(j == m)
{
j = p[j];
printf("%d ", i-m);
}
}
}
int main()
{
freopen("strmatch.in", "r", stdin);
freopen("strmatch.out", "w", stdout);
scanf("%s\n%s", a, b);
m = strlen(a);
n = strlen(b);
formp();
kmp();
return 0;
}