Pagini recente » Cod sursa (job #176185) | Cod sursa (job #330435) | Cod sursa (job #751668) | Cod sursa (job #666742) | Cod sursa (job #3292624)
#include <iostream>
#include <string>
#include <vector>
using namespace std;
string a, b, sir;
int Z[4000002];
int main()
{
vector<int> rez;
cin>>a>>b;
sir = a;
sir += "$";
sir += b;
int n = sir.size(), best = 0, nrsecv = 0;
int la = a.size();
Z[0] = 0;
for(int i = 1; i < n; ++i)
{
int capatdr = Z[best];
int j = i - best;
if(i < capatdr)
Z[i] = min(capatdr, Z[j]);
while(i + Z[i] < n && sir[Z[i]] == sir[Z[i] + i])
{
++Z[i];
}
if(i + Z[i] > capatdr)
best = i;
if(Z[i] == la)
{
++nrsecv;
rez.push_back(i);
}
}
cout<<nrsecv<<"\n";
for(auto i : rez)
{
cout<<i - la - 1<<" ";
}
return 0;
}