Pagini recente » Cod sursa (job #691412) | Cod sursa (job #2305298) | Cod sursa (job #1419610) | Cod sursa (job #963059) | Cod sursa (job #352478)
Cod sursa(job #352478)
#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, cnt = 0;
cin >> a;
lena = a.length();
cin >> b;
lenb = b.length();
k = -1;
phi[0] = -1;
for(i = 1; i < lena; ++i)
{
while(k != -1 && a[k + 1] != a[i])
{
k = phi[k];
}
if(a[k + 1] == a[i])
{
++k;
}
phi[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 && cnt < 1000)
{
++cnt;
printf("%d ", i - lena + 1);
k = phi[k];
}
}
return 0;
}