Pagini recente » Cod sursa (job #1846445) | Cod sursa (job #2591387) | Cod sursa (job #2161187) | Cod sursa (job #2815543) | Cod sursa (job #1799001)
#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,var1=0;
for(int i=strlen(sir1)-1;i>=0;i--)
{
var=var+((sir1[i]-'A'+1)*p27)%666013;
var1=var1+((sir1[i]-'A'+1)*p27)%100003;
p27*=27;
}
int verif=0,verif1=0;
p27=1;
for(int i=strlen(sir1)-1;i>=0;i--)
{
verif=verif+((sir2[i]-'A'+1)*p27)%100003;
verif1=verif1+((sir2[i]-'A'+1)*p27)%666013;
p27*=27;
}
int rez=0,pst27=1,pdr27=p27/27;
if(verif==var && verif1==var1)
{
rez++;
v[rez]=0;
}
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)%666013;
verif1=(verif1-(sir2[i-1]-'A'+1)*pdr27)*27+(sir2[i+strlen(sir1)-1]-'A'+1)%100003;
//pst27*=27;
//pdr27*=27;
if(verif==var && verif1==var1)
{
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;
}