Pagini recente » Cod sursa (job #2691698) | Cod sursa (job #965678) | Cod sursa (job #1674725) | Cod sursa (job #2477942) | Cod sursa (job #2945018)
//#include <iostream>
#include <fstream>
using namespace std;
ifstream cin("strmatch.in");
ofstream cout("strmatch.out");
int z[4000005];
int main() {
string s,s2;
cin>>s;
int m=s.length();
cin>>s2;
s+='$';
s+=s2;
int n=s.length(),r=0,l=0;
for(int i=1;i<n;i++) {
if (i <= r) {
z[i] = min(z[i - l], r-i + 1);
}
while (i + z[i] < n and s[z[i]] == s[i + z[i]]) {
z[i]++;
}
if (i + z[i] - 1 > r) {
l = i;
r = i + z[i] - 1;
}
}
int cnt=0;
for(int i=0;i<n;i++){
if(z[i]==m){
cnt++;
}
}
cout<<cnt<<"\n";
if(cnt>1000)
cnt=1000;
for(int i=0;i<n and cnt!=0;i++){
if(m==z[i]) {
cnt--;
cout << i - m - 1 << " ";
}
}
return 0;
}