Pagini recente » Cod sursa (job #1518135) | Cod sursa (job #259264) | Cod sursa (job #1414307) | Cod sursa (job #1266289) | Cod sursa (job #2745305)
#include <bits/stdc++.h>
using namespace std;
ifstream f ("strmatch.in");
ofstream g ("strmatch.out");
int main() {
string a, b;
f >> a >> b;
vector<int> pi(a.length()+5,0), ans;
int nr = 0;
for(int i = 1; i < a.length(); i++) {
pi[i] = pi[i-1];
while(pi[i] > 0 && a[pi[i]] != a[i])
pi[i] = pi[pi[i]-1];
if(a[pi[i]] == a[i]) pi[i]++;
}
int c = 0;
for(int i = 0; i < b.length(); i++) {
while(c > 0 && a[c] != b[i])
c = pi[c-1];
if(a[c] == b[i]) c++;
if(c == a.length()) {
nr++;
if(ans.size() < 1000)
ans.push_back(i-a.length()+1);
}
}
g << nr << "\n";
for(auto x : ans) g << x << " ";
}