Cod sursa(job #1022399)

Utilizator taigi100Cazacu Robert taigi100 Data 5 noiembrie 2013 12:57:46
Problema Potrivirea sirurilor Scor 16
Compilator cpp Status done
Runda Arhiva educationala Marime 0.78 kb
#include<stdio.h>
#include<string.h>

char A[2000001],B[2000001],poz[1001],cnt,bad[256];

int main()
{
    FILE *f=fopen("strmatch.in","r");
    FILE *g=fopen("strmatch.out","w");
    fscanf(f,"%s%s",A,B);
    int la=strlen(A);
    int lb=strlen(B);
    for(int i=0;i<256;i++)
     bad[i] = la;
    for(int i=0;i<la-1;i++)
     bad[A[i]]=la-i-1;
    char*p = B;
    int i;
    while(lb>=la)
    {
        for( i=la-1;p[i]==A[i];i--)
         if(i==0)
         {
             if(cnt<1000)
             {
                 cnt++;
                 poz[cnt]= p - B;
             }
         }
         lb-=bad[p[la-1]];
         p+=bad[p[la-1]];
    }
    fprintf(g,"%d\n",cnt);
    int min = cnt>1000 ? 1000:cnt;
    for(i=1;i<=min;i++)
    fprintf(g,"%d ",poz[i]);

}