Pagini recente » Cod sursa (job #2529131) | Cod sursa (job #571979) | Cod sursa (job #2937855) | Cod sursa (job #1113062) | Cod sursa (job #1468297)
#include <fstream>
#include <cstring>
#define Xp 2000013
using namespace std;
ifstream f("strmatch.in");
ofstream g("strmatch.out");
int lung,lun,k,i,n,P[Xp],Pos[Xp];
char a[Xp],b[Xp];
int main()
{
f>>(b+1);
lung=strlen(b+1);
for(i=2;i<=lung;++i)
{
while(k&&b[k+1]!=b[i]) k=P[k];
if(b[k+1]==b[i]) ++k;
P[i]=k;
}
f>>(a+1);
lun=strlen(a+1);
k=0;
for(i=1;i<=lun;++i)
{
while(k&&b[k+1]!=a[i]) k=P[k];
if(b[k+1]==a[i]) ++k;
if(k==lung)
{
k=P[lung];
++n;
if(n<=1000) Pos[n]=i-lung;
}
}
g<<n<<'\n';
for(i=1;i<=min(1000,n);++i) g<<Pos[i]<<" ";
return 0;
}