Pagini recente » Cod sursa (job #1656175) | Cod sursa (job #1573792) | Cod sursa (job #2561260) | Cod sursa (job #2934145) | Cod sursa (job #2899009)
#include<bits/stdc++.h>
using namespace std;
ifstream in("strmatch.in");
ofstream out("strmatch.out");
int main() {
string P;
in >> P;
string T;
in >> T;
vector<int> answer;
int n = T.size();
int m = P.size();
vector<int> preFunc(m, 0);
for(int i = 1; i < m; ++i) {
int k = preFunc[i - 1];
while(k && P[k] != P[i]) {
k = P[k - 1];
}
if(P[k] == P[i]) {
k++;
}
preFunc[i] = k;
}
int 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[k - 1];
if((int) answer.size() < 1000) {
answer.push_back(i - m + 1);
}
}
}
for(auto it : answer) out << it << ' ';
out << '\n';
}