Pagini recente » Cod sursa (job #2381568) | Cod sursa (job #559861) | Cod sursa (job #2797741) | Cod sursa (job #3293169) | Cod sursa (job #1250548)
# include <bits/stdc++.h>
using namespace std;
ifstream fi("strmatch.in");
ofstream fo("strmatch.out");
const int nmax = 2e6 + 5;
const int amax = 1e3 + 5;
char A[nmax],B[nmax];
int p[nmax],s[amax];
int a,b;
int main(void)
{
fi >> (A+1) >> (B+1);
for (a=1;A[a];++a);--a;
for (b=1;B[b];++b);--b;
p[1]=0;
for (int i=2,k=0;i<=a;++i)
{
while (k && A[k+1] != A[i]) k=p[k];
k+=(A[k+1] == A[i]);p[i]=k;
}
for (int i=1,k=0;i<=b;++i)
{
while (k && A[k+1] != B[i]) k=p[k];
k+=(A[k+1] == B[i]);
if (k == a)
{
++s[0];if (s[0] <= 1000) s[s[0]]=i-k;
k=p[k];
}
}
fo << s[0] << '\n';
s[0]=min(s[0],1000);
for (int i=1;i<=s[0];++i) fo << s[i] << ' ';
return 0;
}