Pagini recente » Cod sursa (job #1505713) | Cod sursa (job #594138) | Cod sursa (job #2800058) | Cod sursa (job #692620) | Cod sursa (job #352475)
Cod sursa(job #352475)
#include <stdio.h>
#include <string>
#include <iostream>
using namespace std;
int phi[2000001];
int main()
{
freopen("strmatch.in", "r", stdin);
freopen("strmatch.out", "w", stdout);
string a, b;
int lena, lenb, i, k;
cin >> a;
lena = a.length();
cin >> b;
lenb = b.length();
k = 0;
phi[k] = -1;
for(i = 1; i < lena; ++i)
{
while(k != -1 && a[phi[k] + 1] != a[i])
{
k = phi[k];
}
phi[i] = k;
if(a[phi[k] + 1] == a[i])
{
++k;
}
}
k = -1;
for(i = 0; i < lenb; ++i)
{
while(k != -1 && a[k + 1] != b[i])
{
k = phi[k];
}
if(a[k + 1] == b[i])
{
++k;
}
if(k == lena - 1)
{
printf("%d ", i - lena + 1);
}
}
return 0;
}