Pagini recente » Cod sursa (job #2567814) | Cod sursa (job #2130648) | Cod sursa (job #676550) | Cod sursa (job #1249814) | Cod sursa (job #2441764)
#include <fstream>
using namespace std;
ifstream fin("strmatch.in");
ofstream fout("strmatch.out");
string s;
const int N=(int)4e6+7;
int z[N];
int L,R;
void build_z()
{
int l=-1,r=-1;
int n=(int)s.size();
for(int i=L;i<n;i++)
{
if(i<=r)
z[i]=min(z[i-l],r+1-i);
while(i+z[i]<n && s[i+z[i]]==s[z[i]])
z[i]++;
if(i+z[i]-1>r)
l=i,r=i+z[i]-1;
}
}
int sol[1007],cnt;
int main()
{
fin>>s;
string t;
fin>>t;
s+=".";
L=s.size();
s+=t;
R=s.size()-1;
build_z();
for(int j=L;j<=R;j++)
if(z[j]==L-1)
{
cnt++;
if(cnt<=1000)
sol[cnt]=j-L;
}
fout<<cnt<<"\n";
/// i<=cnt, i<=1000
for(int j=1;j<=min(cnt,1000);j++)
fout<<sol[j]<<" ";
fout<<"\n";
return 0;
}