Pagini recente » Cod sursa (job #449942) | Cod sursa (job #359696) | Cod sursa (job #872031) | Cod sursa (job #3220166) | Cod sursa (job #2866808)
#include <fstream>
#include <string>
#include <vector>
using namespace std;
ifstream cin("strmatch.in");
ofstream cout("strmatch.out");
string A,B,aux,aux1;
int pre[2000200];
vector <int> sol;
inline void scan(); ///
int main()
{
scan();
if(A.size()>B.size())
{
cout<<0<<'\n';
return 0;
}
int q=0;
for(int i=2; i<A.size(); ++i)
{
while(q && A[q+1]!=A[i])
q=pre[q];
if(A[q+1]==A[i])
q++;
pre[i]=q;
}
q=0;
for(int i=1; i<B.size(); ++i)
{
while(q && A[q+1]!=B[i])
q=pre[q];
if(B[i]==A[q+1])
q++;
if(q+1==A.size())
sol.push_back(i-q);
}
cout<<sol.size()<<'\n';
for(auto it:sol)
cout<<it<<' ';
cout<<'\n';
return 0;
}
inline void scan()
{
cin>>aux;
A="0";B="0";
A.append(aux);
cin>>aux1;
B.append(aux1);
}