Pagini recente » Cod sursa (job #2964566) | Cod sursa (job #1564047) | Istoria paginii runda/asdfasdgs | Istoria paginii cevaonioji | Cod sursa (job #2480883)
#include<iostream>
#include<fstream>
#include <string>
#include<vector>
using namespace std;
ifstream fin("strmatch.in");
ofstream fout("strmatch.out");
string A,B;
int poz=1,ind;
int vect[2000003];
vector<int> ans;
int main()
{
fin>>A>>B;
while(poz<A.size()){
if(A[poz]==A[ind])
vect[poz++]=++ind;
else {
if(ind)ind=vect[ind-1];
else vect[poz++]=0;
}
}
poz=0;
while(poz<B.size()){
if(A[ind]==B[poz])poz++,ind++;
if(ind==A.size()){
ans.push_back(poz-ind);
ind=vect[ind-1];
}
else if(poz<B.size()&&A[ind]!=B[poz]){
if(ind)ind=vect[ind-1];
else poz++;
}
}
fout<<ans.size()<<'\n';
for(int poz=0;poz<min((int)ans.size(),1000);poz++)
fout<<ans[poz]<<" ";
return 0;
}