Pagini recente » Cod sursa (job #2327118) | Cod sursa (job #3211708) | Cod sursa (job #1099989) | Cod sursa (job #2917074) | Cod sursa (job #2979550)
#include <bits/stdc++.h>
using namespace std;
const int kN = 2e6 + 5;
string a, b, c;
int z[kN];
int main(){
ios_base::sync_with_stdio(false);
fin >> a >> b;
c = a + "$" + b;
int n = (int)c.size();
int m = (int)a.size();
int l = 0, r = 0;
for (int i = 1; i < n; i++){
if (i <= r){
z[i] = min(r - i + 1, z[i - l]);
}
while (i + z[i] < n && c[z[i]] == c[i + z[i]]){
++z[i];
}
if (i + z[i] - 1 > r){
l = i;
r = i + z[i] - 1;
}
}
vector<int>ans;
for (int i = 0; i < n; i++){
if (z[i] == m){
ans.push_back(i - m - 1);
}
}
fout << (int)ans.size() << '\n';
for (int i = 0; i < min(1000, (int)ans.size()); i++){
fout << ans[i] << ' ';
}
}