Cod sursa(job #444602)

Utilizator drywaterLazar Vlad drywater Data 20 aprilie 2010 22:50:51
Problema Potrivirea sirurilor Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.71 kb
#include <stdio.h>
#include <string.h>
FILE *f=fopen("strmatch.in","r"),*g=fopen("strmatch.out","w");
char a[2000005],b[2000005];
int k,i,n,m,pr[2000005],poz[1024];
int main(void)
{
	fgets(a,2000004,f);
	fgets(b,2000004,f);
	n=strlen(a)-2;
	m=strlen(b)-2;
	k=-1;
	pr[0]=-1;
	for (i=1;i<=n;i++)
	{
		while (k>-1 && a[k+1]!=a[i])
			k=pr[k];
		if (a[k+1]==a[i])
			k++;
		pr[i]=k;
	}
	k=-1;
	for (i=0;i<=m;i++)
	{
		while (k>-1 && a[k+1]!=b[i])
			k=pr[k];
		if (a[k+1]==b[i])
			k++;
		if (k==n)
			if (poz[0]<1000)
				poz[++poz[0]]=i-n;
			else poz[0]++;
	}
	fprintf(g,"%d\n",poz[0]);
	for (i=1;i<=poz[0] && i<=1000;i++)
		fprintf(g,"%d ",poz[i]);
	fprintf(g,"\n");
	fclose(g);
	return 0;
}