Pagini recente » Cod sursa (job #2954551) | Cod sursa (job #1209238) | Cod sursa (job #1457856) | Cod sursa (job #1777179) | Cod sursa (job #1530857)
#include<stdio.h>
#include<string.h>
FILE *fin,*fout;
char s1[2000002],s2[2000002];
int p[2000001],l1,l2;
int res[1001],pos;
int main()
{
fin=fopen("strmatch.in","r");
fout=fopen("strmatch.out","w");
fscanf(fin,"%s",s1+1);
l1=strlen(s1+1);
fscanf(fin,"%s",s2+1);
l2=strlen(s2+1);
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)
{
pos++;
if(pos<=1000)
{
res[pos]=i-k;
}
}
}
fprintf(fout,"%d\n",pos);
for(int i=1;i<=pos;i++)
{
fprintf(fout,"%d ",res[i]);
}
}