Pagini recente » Cod sursa (job #2859784) | Cod sursa (job #2043343) | Cod sursa (job #2920782) | Cod sursa (job #236683) | Cod sursa (job #1822671)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("strmatch.in");
ofstream fout("strmatch.out");
const int nMax = 2000005;
int n, m, pi[nMax], sol[nMax];
char a[nMax], b[nMax];
inline void Pi()
{
int k,i;
pi[1] = k = 0;
for(i = 2; i <= n; ++i)
{
while(k && a[k + 1] != a[i])
k = pi[k];
if(a[k + 1] == a[i])
++k;
pi[i] = k;
}
}
int main()
{
int i, k;
fin >> (a + 1);
fin >> (b + 1);
n = strlen(a + 1);
m = strlen(b + 1);
Pi();
k = 0;
for(i = 1;i <= m; ++i)
{
while(k && a[k + 1] != b[i])
k = pi[k];
if(a[k + 1] == b[i])
++k;
if(k == n)
sol[++sol[0]] = i - n;
}
for(i = 1; i <= sol[0] && i <= 1000; ++i)
fout << sol[i] << " ";
return 0;
}