Pagini recente » Cod sursa (job #852898) | Cod sursa (job #507785) | Cod sursa (job #773958) | Cod sursa (job #2105343) | Cod sursa (job #1944114)
#include <bits/stdc++.h>
using namespace std;
ifstream f("strmatch.in");
ofstream g("strmatch.out");
char a[2000002], b[2000002];
int i,q,lung[2000002],vs[1005],sol,n,m;
int main() {
f.getline(a+1,sizeof(a));
f.getline(b+1,sizeof(b));
n=strlen(a+1), m=strlen(b+1);
for (i=2; i<=n; i++) {
while (a[q+1]!=a[i] && q)
q=lung[q];
if (a[q+1]==a[i]) q++;
lung[i]=q;
}
for (i=1, q = lung[1] = 0; i<=m; i++) {
while (a[q+1]!=b[i] && q)
q=lung[q];
if (a[q+1]==b[i]) q++;
if (q==n) {sol++;
if (sol<=1000)
vs[sol]=i-q;
q=lung[q];
}
}
g<<sol<<'\n';
sol=min(sol,1000);
for (i=1; i<=sol; i++)
g<<vs[i]<<' ';
}