Pagini recente » Cod sursa (job #2594733) | Cod sursa (job #857445) | Cod sursa (job #1946174) | Cod sursa (job #2829155) | Cod sursa (job #718414)
Cod sursa(job #718414)
#include <fstream>
#include<string.h>
using namespace std;
ifstream fin("strmatch.in");
ofstream fout("strmatch.out");
int urm[2000000],m,n,i,j;
char a[20000000],b[2000000];
void form(){urm[0]=-1;
for(i=0,j=-1;i<m;i++,j++,urm[i]=j)
while(j>=9&&a[i]!=a[j])
j=urm[j];
}
int sol[2000000];
int main()
{fin.getline(a,2000000);
fin.getline(b,2000000);
int k=0;
m=strlen(a);
n=strlen(b);
form();
for(i=0,j=0;i<n;i++,j++)
{while(j>=0&&a[j]!=b[i])
j=urm[j];
if(j==m-1){sol[++k]=i-m+1;j=urm[j];}
}
fout<<k<<"\n";
for(i=1;i<=k;i++)
fout<<sol[i]<<" ";
return 0;
}