Pagini recente » Cod sursa (job #2804490) | Cod sursa (job #2068708) | Cod sursa (job #2046980) | Cod sursa (job #2042196) | Cod sursa (job #1799015)
#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=0;i<strlen(sir1);i++)
{
var=(var*27+((sir1[i]-'A'+1)))%666013;
var1=(var1*27+((sir1[i]-'A'+1)))%100003;
p27*=27;
}
int verif=0,verif1=0;
p27=1;
for(int i=0;i<strlen(sir1);i++)
{
verif=(verif*27+((sir2[i]-'A'+1)))%100003;
verif1=(verif1*27+((sir2[i]-'A'+1)))%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);
if(rez>1000)
rez=1000;
for(int i=1;i<=rez;i++)
fprintf(fout,"%d ",v[i]);
fclose(fout);
return 0;
}