Pagini recente » Cod sursa (job #1006291) | Monitorul de evaluare | Cod sursa (job #2492662) | Cod sursa (job #2565519) | Cod sursa (job #2574465)
#include <fstream>
#include <cstring>
using namespace std;
ifstream fin("strmatch.in");
ofstream fout("strmatch.out");
int v[2000005],l,n,nr,i,k,j,sol[1005];
char a[2000005],s[2000005];
int main(){
fin>>(a+1)>>(s+1);
l=strlen(a+1);
n=strlen(s+1);
j=1; i=2;
v[0]=v[1]=1;
while(i<=l){
if(a[i]==a[j]){
v[i]=j+1;
i++;
j++;
}
else{
v[i]=1;
if(j>1)
j=v[j-1];
else
i++;
}
}
i=1,j=1;
while(i<=n){
if(a[j]==s[i]){
if(j==l){
nr++;
if(nr<=1000)
sol[nr]=i-l;
}
i++;
j++;
}
else{
if(j>1)
j=v[j-1];
else
i++;
}
}
fout<<nr<<'\n';
for(i=1;i<=nr;i++)
fout<<sol[i]<<' ';
return 0;
}