Pagini recente » Borderou de evaluare (job #3364942) | Borderou de evaluare (job #3366156) | Cod sursa (job #3365467) | Cod sursa (job #3366154) | Cod sursa (job #3366159)
#include <bits/stdc++.h>
using namespace std;
bool INP=true;
int main(){
ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
if(INP){
freopen("strmatch.in","r",stdin);
freopen("strmatch.out","w",stdout);
}
string A,B;cin>>A>>B;
string S=A+'#'+B;
int kmp[S.size()];
kmp[0]=0;
for(int i=1;i<S.size();i++){
kmp[i]=kmp[i-1];
while(kmp[i]>0 && S[kmp[i]] != S[i]){
kmp[i]=kmp[kmp[i]-1];
}
if(S[kmp[i]]==S[i])kmp[i]++;
}
int cnt=0;
vector<int> res;
for(int i=0;i<S.size();i++){
if(kmp[i]==A.size()){
cnt++;
if(res.size()<1000){
res.push_back(i-2*A.size());
}
}
}
cout<<cnt<<'\n';
for(auto i: res){
cout<<i<<' ';
}
}