Pagini recente » Cod sursa (job #1732810) | Cod sursa (job #1733128) | Cod sursa (job #1470649) | Atasamentele paginii CeiMaiMariOlimpicari: Runda #2 | Cod sursa (job #2977431)
#include <bits/stdc++.h>
using namespace std;
ifstream f("strmatch.in");
ofstream g("strmatch.out");
string s,t;
int z[4000002];
void cit()
{
f>>s>>t;
}
void rez()
{
string zet=s+'!'+t;
vector <int> k;
int st=0,dr=0;
for(int i=1;i<zet.size();i++)
{
if(i<=dr)
z[i]=min(z[i-1],dr-i+1);
while(i+z[i]<zet.size() && zet[i+z[i]]==zet[z[i]])
z[i]++;
if(i+z[i]-1>dr)
{
dr=i+z[i]-1;
st=i;
}
}
int cate = 0;
for(int i=0;i<zet.size();i++)
if(z[i]==s.size()){
cate++;
if ( cate <= 1000 )
k.push_back(i-s.size()-1);
}
g<<cate<<'\n';
for(int i=0;i<k.size();i++)
g<<k[i]<<" ";
}
int main()
{
cit();
rez();
return 0;
}