Pagini recente » Cod sursa (job #1957530) | Cod sursa (job #1240866) | Cod sursa (job #745048) | Cod sursa (job #2548819) | Cod sursa (job #1340181)
#include <fstream>
#include <cstring>
#define DIM 2000011
using namespace std;
ifstream f("strmatch.in");
ofstream g("strmatch.out");
int n,m,nr,L;
int sol[1011],P[DIM];
char A[DIM],B[DIM];
int main(void){
register int i,j;
f>>A+1>>B+1;
n=strlen(A+1);
m=strlen(B+1);
L=0,P[1]=0;
for(i=2;i<=n;i++){
while(L && A[i]!=A[L+1]) L=P[L];
if(A[i]==A[L+1]) L++;
P[i]=L;
}
L=0;
for(i=1;i<=m;i++){
while(L && B[i]!=A[L+1]) L=P[L];
if(B[i]==A[L+1]) L++;
if(L==n){
nr++;
if(nr<=1000)
sol[nr]=i-L;
}
}
g<<nr<<"\n";
nr=min(nr,1000);
for(i=1;i<=nr;i++) g<<sol[i]<<" ";
f.close();
g.close();
return 0;
}