Pagini recente » Cod sursa (job #2865342) | Cod sursa (job #351170) | Cod sursa (job #1382986) | Cod sursa (job #1161090) | Cod sursa (job #2977435)
#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)
{
st=i;
dr=i+z[i]-1;
}
}
int cate = 0;
for(int i=s.size() + 1, kapa=0;i<zet.size();i++, kapa++)
if(z[i]==s.size()){
cate++;
if ( cate <= 1000 )
k.push_back(kapa);
}
g<<cate<<'\n';
for(int x : k)
g<<x<<" ";
}
int main()
{
cit();
rez();
return 0;
}