Pagini recente » Cod sursa (job #2473282) | Cod sursa (job #579927) | Cod sursa (job #2495817) | Cod sursa (job #1817932) | Cod sursa (job #1330620)
#include <fstream>
#include <cstring>
using namespace std;
ifstream cin("strmatch.in");
ofstream cout("strmatch.out");
const int nmax=2000010;
int n,m,p[nmax],t,v[1010];
char a[nmax],b[nmax];
int main()
{
int i,j;
cin.get(a+1,nmax);
cin.get();
cin.get(b+1,nmax);
n=strlen(a+1);
m=strlen(b+1);
for (i=2;i<=n;i++)
{
while (t && a[t+1]!=a[i])
t=p[t];
if (a[t+1]==a[i])
t++;
p[i]=t;
}
t=0;
for (i=1;i<=m;i++)
{
while (t && a[t+1]!=b[i])
t=p[t];
if (a[t+1]==b[i])
t++;
if (t==n && v[0]<1000)
{
t=p[n];
v[++v[0]]=i-n;
}
}
cout<<v[0]<<'\n';
for (i=1;i<=v[0];i++)
cout<<v[i]<<" ";
}