Pagini recente » Cod sursa (job #272198) | Cod sursa (job #1364641) | Cod sursa (job #1834095) | Cod sursa (job #2894300) | Cod sursa (job #3250294)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("strmatch.in");
ofstream fout("strmatch.out");
string a, b;
int lps[2000005], n, m, i, len, j, v[1005], k;
int main()
{
fin>>a>>b;
n=a.size();
m=b.size();
i=1;
lps[0]=0;
while (i<n) {
if (a[i]==a[len]) {
len++;
lps[i]=len;
i++;
}
else {
if (len==0) {
lps[i]=len;
i++;
}
else len=lps[len-1];
}
}
for (i=1; i<n; i++) cout<<lps[i]<<' ';
i=j=0;
while (i<m) {
if (j==n) {
if (k<=999) v[++k]=i-n;
else k++;
j=lps[j-1];
}
if (b[i]==a[j]) {
i++;
j++;
}
else {
if (j==0) {
i++;
}
j=lps[j-1];
}
}
if (j==n) if (k<=999) v[++k]=i-n; else k++;
fout<<k<<'\n';
for (i=1; i<=min(k, 1000); i++) fout<<v[i]<<' ';
return 0;
}