Cod sursa(job #517460)

Utilizator BlaugranasEnal Gemaledin Blaugranas Data 28 decembrie 2010 21:31:09
Problema Potrivirea sirurilor Scor 38
Compilator cpp Status done
Runda Arhiva educationala Marime 1.15 kb
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define N 2000001
char *s1,*s2;
long v[N],n,m;
int main()
{long i,k=0,t=0;
freopen("strmatch.in","r",stdin);
freopen("strmatch.out","w",stdout);
s1=(char*)malloc(N*sizeof(char));
s2=(char*)malloc(N*sizeof(char));
scanf("%s\n",s1);
scanf("%s\n",s2);
m=strlen(s1);
n=strlen(s2);
if(m>=n)
      {i=0;
      while(i<m)
             {while(k>0&&s2[k]!=s1[i])
                     k=0;
             if(s2[k]==s1[i])
                     k++;
             if(k==n)
                     {v[t++]=i-n+1;
                     i=i-n+2;}
             i++;}}
else
      {i=0;
      while(i<n)
             {while(k>0&&s1[k]!=s2[i])
                     k=0;
             if(s1[k]==s2[i])
                     k++;
             if(k==m)
                     {v[t++]=i-m+1;
                     i=i-m+2;}
             i++;}}
printf("%ld\n",t);
if(t<=1000)
      {for(i=0;i<t;i++)
            printf("%ld ",v[i]);
      printf("\n");}
else
      {for(i=0;i<1000;i++)
            printf("%ld ",v[i]);
      printf("\n");}
free(s1);
free(s2);
fclose(stdin);
fclose(stdout);
return 0;}