#include<iostream> #include<string> #include<vector> #include "message.h" #include "poszukiwania.h" using namespace std; int main(){ long long i,t,tmp; int instancja; //vector<int> SigAt,SeqAt; //int SignalLength, SeqLength; //cin>>SignalLength>>SeqLength; //SigAt.resize(SignalLength); //SeqAt.resize(SeqLength); //for(i=0;i<SignalLength;i++) cin>>SigAt[i]; //for(i=0;i<SeqLength;i++) cin>>SeqAt[i]; long long cnt=0; long long poczatek=(SeqLength()/NumberOfNodes())*(MyNodeId()+1); long long koniec=2*SignalLength()+1+SeqLength(); long long p[koniec]; p[0]=0; p[SignalLength()+1]=0; for(i=1,t=0;i<koniec;i++){ if(i<=SignalLength()){ while(t>0&&SignalAt(t+1)!=SignalAt(i+1)) t=p[t-1]; if(SignalAt(t+1)==SignalAt(i+1)) p[i]=++t; else p[i]=0; } else if(i==SignalLength()+1)p[i]=0; else{ while(t>0&&SignalAt(t+1)!=SeqAt(i-SignalLength())) t=p[t-1]; if(SignalAt(t+1)==SeqAt(i-SignalLength())) p[i]=++t; else p[i]=0; if(p[i]==SignalLength())cnt++; } } if(MyNodeId()!=0){ PutLL(0,cnt); Send(0); } else{ for(i=0;i<NumberOfNodes();i++){ instancja=Receive(-1); cnt+=GetLL(instancja); } cout<<cnt/NumberOfNodes(); } 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 51 | #include<iostream> #include<string> #include<vector> #include "message.h" #include "poszukiwania.h" using namespace std; int main(){ long long i,t,tmp; int instancja; //vector<int> SigAt,SeqAt; //int SignalLength, SeqLength; //cin>>SignalLength>>SeqLength; //SigAt.resize(SignalLength); //SeqAt.resize(SeqLength); //for(i=0;i<SignalLength;i++) cin>>SigAt[i]; //for(i=0;i<SeqLength;i++) cin>>SeqAt[i]; long long cnt=0; long long poczatek=(SeqLength()/NumberOfNodes())*(MyNodeId()+1); long long koniec=2*SignalLength()+1+SeqLength(); long long p[koniec]; p[0]=0; p[SignalLength()+1]=0; for(i=1,t=0;i<koniec;i++){ if(i<=SignalLength()){ while(t>0&&SignalAt(t+1)!=SignalAt(i+1)) t=p[t-1]; if(SignalAt(t+1)==SignalAt(i+1)) p[i]=++t; else p[i]=0; } else if(i==SignalLength()+1)p[i]=0; else{ while(t>0&&SignalAt(t+1)!=SeqAt(i-SignalLength())) t=p[t-1]; if(SignalAt(t+1)==SeqAt(i-SignalLength())) p[i]=++t; else p[i]=0; if(p[i]==SignalLength())cnt++; } } if(MyNodeId()!=0){ PutLL(0,cnt); Send(0); } else{ for(i=0;i<NumberOfNodes();i++){ instancja=Receive(-1); cnt+=GetLL(instancja); } cout<<cnt/NumberOfNodes(); } return 0; } |