Pagini recente » Cod sursa (job #737100) | Cod sursa (job #1220307) | Cod sursa (job #2708376) | Cod sursa (job #164726) | Cod sursa (job #1530771)
#include<stdio.h>
#include<string.h>
FILE *fin,*fout;
char s1[2000002],s2[2000002];
int p[2000001],l1,l2;
int res[2000001],pos;
int main()
{
fin=fopen("strmatch.in","r");
fout=fopen("strmatch.out","w");
fscanf(fin,"%s",s1);
l1=strlen(s1);
fscanf(fin,"%s",s2);
l2=strlen(s2);
int k=0;
for(int i=2;i<l1;i++)
{
while(k>0&&s1[k+1]!=s1[i])
{
k=p[k];
}
if(s1[k+1]==s1[i])
{
k++;
}
p[i]=k;
}
k=0;
for(int i=1;i<l2;i++)
{
while(s2[i]!=s1[k+1]&&k>0)
{
k=p[k];
}
if(s2[i]==s1[k+1])
{
k++;
}
if(k==l1-1)
{
pos++;
res[pos]=i-k;
k=p[k];
}
}
fprintf(fout,"%d\n",pos);
for(int i=1;i<=pos;i++)
{
fprintf(fout,"%d ",res[i]);
}
}