Pagini recente » Cod sursa (job #2550849) | Cod sursa (job #2393779) | Cod sursa (job #827280) | Cod sursa (job #1107961) | Cod sursa (job #1528227)
#include<stdio.h>
#include <ostream>
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");
s1[0]='K';
for(l1=1;(s1[l1-1]>='A'&&s1[l1-1]<='Z')||s1[l1-1]>='a'&&s1[l1-1]<='z';l1++)
{
fscanf(fin,"%c",&s1[l1]);
}
l1--;
l2=1;
while(!feof(fin))
{
fscanf(fin,"%c",&s2[l2]);
l2++;
}
l2--;
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]);
}
}