Pagini recente » Cod sursa (job #2165556) | Cod sursa (job #654322) | Cod sursa (job #485727) | Cod sursa (job #1527864) | Cod sursa (job #1206525)
#include<fstream>
#include<cstring>
using namespace std;
int n, m, p[200010], i, q, k, sol[1010];
char a[2000010], b[2000010];
ifstream in("strmatch.in");
ofstream out("strmatch.out");
int main(){
in>>a+1;
n=strlen(a+1);
in>>b+1;
m=strlen(b+1);
q=0;
p[1]=0;
for(i=2; i<=n; i++){
while(a[i]!=a[q+1] && q!=0)
q=p[q];
if(a[i]==a[q+1])
q++;
p[i]=q;
}
q=0;
for(i=1; i<=m; i++){
while(b[i]!=a[q+1] && q!=0)
q=p[q];
if(b[i]==a[q+1])
q++;
if(q==n){
k++;
if(k<=1000)
sol[k]=i-n;
q=p[q];
}
}
out<<k<<"\n";
if(k>1000)
k=1000;
for(i=1; i<=k; i++)
out<<sol[i]<<" ";
return 0;
}