Pagini recente » Borderou de evaluare (job #1867568) | Borderou de evaluare (job #956601) | Borderou de evaluare (job #1882341) | Borderou de evaluare (job #251189) | Cod sursa (job #582405)
Cod sursa(job #582405)
#include<fstream>
#include<cstring>
#define NMAX 2000005
using namespace std;
char A[NMAX],B[NMAX];
int NA,NB;
int poz[1020];
int pi[NMAX];
inline void make_prefix()
{
int q=0;
for(int i=2;i<=NA;i++)
{
while(q && A[q+1]!=A[i])
q=pi[q];
if(A[q+1]==A[i])
q++;
pi[i]=q;
}
}
ifstream in("strmatch.in");
ofstream out("strmatch.out");
int main()
{
in>>A+1;
in>>B+1;
NA=strlen(A+1);
NB=strlen(B+1);
make_prefix();
int q=0,nr=0;
for(int i=1;i<=NB;i++)
{
while(q && A[q+1]!=B[i])
q=pi[q];
if(A[q+1]==B[i])
q++;
if(q==NA)
{
q=pi[NA];
poz[++nr]=i-NA;
}
}
out<<nr<<"\n";
for(int i=1;i<=nr;i++)
out<<poz[i]<<" ";
return 0;
}