Pagini recente » Cod sursa (job #2250348) | Cod sursa (job #2295231) | Cod sursa (job #1452578) | Cod sursa (job #711028) | Cod sursa (job #567197)
Cod sursa(job #567197)
#include<stdio.h>
#include<string.h>
#define dim 2000003
using namespace std;
int i,a,b,m,n,k,num,urm[dim],v[dim],K;
char A[dim],B[dim];
void urmatorul()
{k=1;
while(k<m)
{
if(A[a]==A[k]) {num++; urm[k]=num; a++; k++;}
else {num=0; a=0;
if(A[a]==A[k]) {num++; a++; urm[k]=num;}
k++;}
}
}
void potrivire()
{int k=a,p=b;
while(A[k] == B[p])
{k++; p++;}
a=k;
}
int main()
{
FILE *f=fopen("strmatch.in","r"), *g=fopen("strmatch.out","w");
fgets(A,dim,f);
fgets(B,dim,f);
m=strlen(A); m--;
n=strlen(B); n--;
urmatorul();
a=0;
while(b<=n)
{if(B[b]==A[a]) potrivire();
if(a==m)
{K++; v[K]=b;}
b+=(a-urm[a])+1; a=0;}
fprintf(g,"%d\n",K);
for(i=1; i<=K; i++)
fprintf(g,"%d ",v[i]);
fclose(f);
fclose(g);
return 0;
}