Pagini recente » Cod sursa (job #1275208) | Cod sursa (job #2866334) | Cod sursa (job #983790) | Cod sursa (job #2499720) | Cod sursa (job #2899179)
#include<fstream>
#include<vector>
#include<string>
using namespace std;
ifstream in("strmatch.in");
ofstream out("strmatch.out");
int preFunc[2000005];
int answer[1001], L = 0;
int main() {
ios_base::sync_with_stdio(false);
string P;
string T;
in >> P >> T;
int n = T.size();
int m = P.size();
preFunc[0] = 0;
int k = 0;
for(int i = 1; i < m; ++i) {
while(k && P[k] != P[i]) {
k = P[k - 1];
}
if(P[k] == P[i]) {
k++;
}
preFunc[i] = k;
}
k = 0;
for(int i = 0; i < n; ++i) {
while(k && P[k] != T[i]) {
k = preFunc[k - 1];
}
if(P[k] == T[i]) {
k++;
}
if(k == m) {
k = preFunc[m - 1];
L++;
if(L <= 1000) {
answer[L] = i - m + 1;
}
}
}
out << L << '\n';
for(int i = 1; i <= min(L, 1000); ++i) {
out << answer[i] << ' ';
}
}