Pagini recente » Cod sursa (job #535604) | Cod sursa (job #1290307) | Cod sursa (job #2785894) | Cod sursa (job #1775012) | Cod sursa (job #1515652)
#include <stdio.h>
#define BAZA 52
#define MOD 1999999973
#define lg 2000000
char a[lg],b[lg],ch;
int v[1000];
int CONV(){
if(ch>='a'&&ch<='z')
return ch-'a'+1;
else
return 27+ch-'A';
}
int verific(int m,int n){
int i,j,pp=0;
for(i=n,j=m-n+1;i<=n;i++,j++)
if(a[i]!=b[j])
pp=1;
if(pp==0)
return m-n-1;
else
return -1;
}
int main(){
FILE *fin,*fout;
fin=fopen("strmatch.in","r");
fout=fopen("strmatch.out","w");
int n,m,i,nra,nrb,cate,poz;
int PUT=1;
n=0;
nra=0;
ch=fgetc(fin);
while(ch!='\n'){
a[n]=ch;
n++;
nra=nra*BAZA+CONV();
nra%=MOD;
PUT=(PUT*BAZA)%MOD;
ch=fgetc(fin);
}
PUT/=BAZA;
n--;
m=0;
nrb=0;
while(m<=n){
ch=fgetc(fin);
b[m]=ch;
m++;
nrb=nrb*BAZA+CONV();
nrb%=MOD;
}
cate=-1;
ch=fgetc(fin);
while(ch!='\n'){
if(nra==nrb){
poz=verific(m,n);
if(poz>=0){
cate++;
if(cate<1000)
v[cate]=poz;
}
}
b[m]=ch;
m++;
nrb%=PUT;
nrb=nrb*BAZA+CONV();
nrb%=MOD;
ch=fgetc(fin);
}
fprintf(fout,"%d\n",cate+1);
for(i=0;i<=cate;i++)
fprintf(fout,"%d ",v[i]);
fclose(fin);
fclose(fout);
return 0;
}