#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; } |