#include <stdio.h>
#include <stdlib.h>
#include "poszukiwania.h"
#include "message.h"
int main() {
int *t;
int sn, tp, i, j, r, e, p;
sn = SignalLength();
t = (int *)malloc(sn*sizeof(*t));
t[0]=0; t[1]=0;
for (tp=0, i=2; i<=sn; ++i) {
while (tp>0 && SignalAt(tp+1)!=SignalAt(i)) tp=t[tp];
if (SignalAt(tp+1)==SignalAt(i)) ++tp;
t[i]=tp;
}
j=0;
p = (SeqLength()-sn+2)/NumberOfNodes();
if (p<97) p = 97;
i=p * MyNodeId();
if (i<1) i=1;
e=(MyNodeId()+1)*p;
if (e > SeqLength()-sn+2) e = SeqLength()-sn+2;
// if (MyNodeId() == NumberOfNodes()-1) e = SeqLength()-sn+1;
r = 0;
while (i<=e) {
j=t[j];
while ( j<sn && SignalAt(j+1)==SeqAt(i+j)) j++;
if (j==sn) r++;
if (j>t[j]) i += j-t[j]; else ++i;
}
PutInt(0, r);
Send(0);
if (MyNodeId() == 0) {
r = 0;
for (i=0, j=0; i<NumberOfNodes(); ++i) {
Receive(i);
r += GetInt(i);
}
printf("%d\n", r);
}
return 0;
}
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 | #include <stdio.h> #include <stdlib.h> #include "poszukiwania.h" #include "message.h" int main() { int *t; int sn, tp, i, j, r, e, p; sn = SignalLength(); t = (int *)malloc(sn*sizeof(*t)); t[0]=0; t[1]=0; for (tp=0, i=2; i<=sn; ++i) { while (tp>0 && SignalAt(tp+1)!=SignalAt(i)) tp=t[tp]; if (SignalAt(tp+1)==SignalAt(i)) ++tp; t[i]=tp; } j=0; p = (SeqLength()-sn+2)/NumberOfNodes(); if (p<97) p = 97; i=p * MyNodeId(); if (i<1) i=1; e=(MyNodeId()+1)*p; if (e > SeqLength()-sn+2) e = SeqLength()-sn+2; // if (MyNodeId() == NumberOfNodes()-1) e = SeqLength()-sn+1; r = 0; while (i<=e) { j=t[j]; while ( j<sn && SignalAt(j+1)==SeqAt(i+j)) j++; if (j==sn) r++; if (j>t[j]) i += j-t[j]; else ++i; } PutInt(0, r); Send(0); if (MyNodeId() == 0) { r = 0; for (i=0, j=0; i<NumberOfNodes(); ++i) { Receive(i); r += GetInt(i); } printf("%d\n", r); } return 0; } |
English