Cod sursa(job #1798984)

Utilizator andy1207Cioltan Andrei andy1207 Data 5 noiembrie 2016 17:19:43
Problema Potrivirea sirurilor Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.06 kb
#include<cstdio>
#include<cstring>

char sir1[2000001];
char sir2[2000001];
int v[2000001];

int main()
{
 FILE *fin=fopen("strmatch.in","r");
 fscanf(fin,"%s",&sir1);
 fscanf(fin,"%s",&sir2);
 fclose(fin);
 int var=0,p27=1;
 for(int i=strlen(sir1)-1;i>=0;i--)
    {
     var=var+((sir1[i]-'A'+1)*p27)%666013;
     p27*=27;
    }
 int verif=0;
 p27=1;
 for(int i=strlen(sir1)-1;i>=0;i--)
    {
     verif=verif+((sir2[i]-'A'+1)*p27)%100003;
     p27*=27;
    }
 int rez=0,pst27=1,pdr27=p27/27;
 if(verif==var)
    {
     rez++;
     v[rez]=1;
    }
 for(int i=1;i<strlen(sir2)-strlen(sir1)+1;i++)
    {
     //verif=(verif-(sir2[i-1]-'A'+1)*pst27+(sir2[i+strlen(sir1)+1]-'A'+1)*pdr27);
     verif=(verif-(sir2[i-1]-'A'+1)*pdr27)*27+(sir2[i+strlen(sir1)-1]-'A'+1);
     //pst27*=27;
     //pdr27*=27;
     if(verif==var)
        {
         rez++;
         v[rez]=i;
        }
    }
 FILE *fout=fopen("strmatch.out","w");
 fprintf(fout,"%d\n",rez);
 for(int i=1;i<=rez;i++)
     fprintf(fout,"%d ",v[i]);
 fclose(fout);
 return 0;
}