Pagini recente » Cod sursa (job #805566) | Cod sursa (job #188575) | Cod sursa (job #3255979) | Cod sursa (job #2058487) | Cod sursa (job #411831)
Cod sursa(job #411831)
#include <stdio.h>
#include <string.h>
#define lg1 strlen(S1+1)
#define lg2 strlen(S2+1)
#define num (nr++)>=999?1000:nr
#define size 2000003
using namespace std;
char S1[size],S2[size];
int *poz;
int rez[1005];
int nr;
void citire()
{
fgets(S1+1,size,stdin);
S1[lg1]=0;
fgets(S2+1,size,stdin);
S2[lg2]=0;
poz = new int[lg1];
}
void prefix()
{
int k=0;
for (int i=2;i<=lg1;i++)
{
while (k!=0 && S1[i]!=S1[k+1])
k=poz[k];
if (S1[i]==S1[k+1])
k++;
poz[i]=k;
}
}
void solve()
{
int k=0;
for (int j=1;j<=lg2;j++)
{
while (k!=0 && S2[j]!=S1[k+1])
k=poz[k];
if (S2[j]==S1[k+1])
k++;
if (k==lg1)
{
rez[num]=j;
k=poz[k];
}
}
printf("%d\n",nr);
for (int i=1;i<=nr;i++)
printf("%d ",rez[i]-lg1);
}
int main ()
{
freopen ("strmatch.in","r",stdin);
freopen ("strmatch.out","w",stdout);
citire();
prefix();
solve();
return 0;
}