Pagini recente » Cod sursa (job #411800) | Cod sursa (job #3289403) | Cod sursa (job #259067) | Cod sursa (job #536858) | Cod sursa (job #552366)
Cod sursa(job #552366)
#include <cstdio>
#include <cstring>
#define lmax 2000005
using namespace std;
FILE *fin=freopen("strmatch.in","r",stdin);
FILE *fout=freopen("strmatch.out","w",stdout);
char a[lmax],b[lmax];
int m,n,p[lmax],ap[1001],k=0;
void citire()
{
scanf("%s\n%s",a,b);
m=strlen(a);
n=strlen(b);
}
void prefix()
{
int i=0,j=-1;
p[i]=j;
while(i<m)
{
while(j>=0 && a[i]!=a[j])
j=p[j];
i++; j++;
p[i]=j;
}
}
void cauta()
{
int i=0,j=0;
while(i<n)
{
while(j>=0 && b[i]!=a[j])
j=p[j];
i++;
j++;
if(j==m)
{
if(k<1000)
ap[k++]=i-j;
else
k++;
j=p[j];
}
}
}
void afisare()
{
printf("%d\n",k);
for(int i=0; i<k && i<1000;i++)
printf("%d ", ap[i]);
}
int main()
{
citire();
prefix();
cauta();
afisare();
return 0;
}