Pagini recente » Cod sursa (job #1043539) | Cod sursa (job #2792377) | Cod sursa (job #1819230) | Cod sursa (job #3282234) | Cod sursa (job #1750960)
#include <iostream>
#include<string.h>
#define SIZE 2000000
int main() {
freopen("strmatch.in", "r", stdin);
freopen("strmatch.out", "w", stdout);
char * w1=(char*)malloc(SIZE);
char * w2=(char*)malloc(SIZE);
scanf("%s %s",w1,w2);
int * v=(int*)malloc(sizeof(int)*strlen(w1));
int * c=(int*)malloc(sizeof(int)*strlen(w2));
v[0]=0;
int vindex=1,len=0;
while (vindex < strlen(w1))
{
if(w1[vindex]==w1[len]){
len++;
v[vindex]=len;
vindex++;
}else{
if(len!=0){
len=0;
}else{
v[vindex]=0;
vindex++;
}
}
}
int w1len=strlen(w1);
int w2len=strlen(w2);
int i=0,j=0,count=0;
while(j<w2len){
if(w1[i]==w2[j]){
i++;j++;
}else if(i!=0&&j!=0&&w1[i-1]==w2[j]){
j--;
}else{
j+=v[i]+1;
i=0;
}
if(i==w1len){
i=0;
c[count++]=j-w1len;
}
}
printf("%d\n",count);
for(i=0;i<count;i++){
printf("%d ",c[i]);
}
}