Pagini recente » Cod sursa (job #2861543) | Cod sursa (job #275845) | Istoria paginii utilizator/ysaika1776 | Istoria paginii runda/9 | Cod sursa (job #2480879)
#include<iostream>
#include<fstream>
#include <string>
#include<vector>
using namespace std;
ifstream fin("strmatch.in");
ofstream fout("strmach.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;
}