Pagini recente » Cod sursa (job #1293029) | Cod sursa (job #2722331) | Cod sursa (job #2858748) | Cod sursa (job #2956244) | Cod sursa (job #2223154)
//#include <iostream>
#include <fstream>
#include <cstring>
#include <queue>
using namespace std;
ifstream cin("strmatch.in");
ofstream cout("strmatch.out");
int lgA, lgB, ap;
char a[2000010], b[2000010];
int v[1005];
queue<int> q[2];
int main()
{
int act=0, poz;
cin>>a>>b;
lgA=strlen(a);
lgB=strlen(b);
for(int i=0; i<lgB; ++i)
{
if(i+lgA-1 < lgB && b[i] == a[0])
q[1^act].push(1);
while(!q[act].empty())
{
poz = q[act].front();
q[act].pop();
if(poz == lgA)
{
++ap;
if(ap <= 1000)
v[ap] = i-lgA;
}
else if(b[i] == a[poz])
q[1^act].push(poz+1);
}
act = 1^act;
}
cout<<ap<<'\n';
for(int i=1; i<=min(ap, 1000); ++i)
cout<<v[i]<<' ';
return 0;
}