Pagini recente » Cod sursa (job #449932) | Cod sursa (job #1570394) | Cod sursa (job #703498) | Cod sursa (job #2149454) | Cod sursa (job #1925571)
#include <iostream>
#include <string>
#include <vector>
using namespace std;
int main()
{
string a, b;
cin >> a >> b;
vector<int> pos;
unsigned int i = 0, j = 0;
unsigned int aux[a.size()];
aux[0] = 0;
for(i = 1; i < a.size(); i++) {
if(a[j] != a[i]) {
if(j == 0) {
aux[i] = 0;
continue;
}
else {
j = aux[j-1];
i--;
}
}
else {
j++;
aux[i] = j;
}
}
j = 0;
while( i < b.size()) {
if( j == a.size()) {
pos.push_back(i - j);
j = aux[j - 1];
if(pos.size() == 1000)
break;
}
if(a[j] == b[i]){
j++;
i++;
}
else {
if(j == 0)
i++;
else {
j = aux[j];
}
}
}
if(j == a.size())
pos.push_back(i - j);
cout << pos.size() << endl;
for(int p :pos)
cout << p << " ";
return 0;
}