Pagini recente » Cod sursa (job #1109583) | Cod sursa (job #379134) | Cod sursa (job #518958) | Cod sursa (job #723700) | Cod sursa (job #1341081)
#include<fstream>
#include<cstring>
using namespace std;
ifstream fin("strmatch.in");
ofstream fout("strmatch.out");
int p[2000003],n,m,i,L,v[1005],nr;
char b[2000003],a[2000003];
int main(){
fin>>a+1;
fin>>b+1;
n=strlen(a+1);
m=strlen(b+1);
p[1]=0;
L=0;
for(i=2;i<=n;i++){
while(L!=0 && 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!=0 && b[i]!=a[L+1]){
L=p[L];
}
if(b[i]==a[L+1]){
L++;
}
if(L==n){
nr++;
L=p[L];
if(nr<=1000){
v[nr]=i-n;
}
}
}
fout<<nr<<"\n";
if(nr>1000){
nr=1000;
}
for(i=1;i<=nr;i++){
fout<<v[i]<<" ";
}
return 0;
}