#include <iostream> #include "message.h" #include "krazki.h" using namespace std; int block_depth(int i,int NOD){ for (int j=1;(j<=i)&&(j<=NOD);j++){ if (HoleDiameter(i-j+1)<DiscDiameter(j)) return i-1; } return -1; } int main() { int liczba=NumberOfNodes(); int PH=PipeHeight(); int NOD=NumberOfDiscs(); if (liczba>PH) liczba=PH; if (MyNodeId()<liczba){ int result=block_depth(MyNodeId()+1,NOD); for (int i=MyNodeId()+1+liczba;(i<=PH)&&(result==-1);i=i+liczba){ int result2=block_depth(i,NOD); result=result2; } if (MyNodeId()>0){ PutInt(0, result); Send(0); } else { for (int instancja = 1; instancja < liczba; ++instancja) { Receive(instancja); int result2=GetInt(instancja); if (((result2<result)&&(result2!=-1))||((result==-1)&&(result2!=-1))) result=result2; } if (result==-1) { if (PH>=NOD) cout<<PH-NOD+1<<endl; else cout<<0<<endl; } else if (result-NOD<0) cout<<0<<endl; else cout<<result-NOD+1<<endl; } } 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 | #include <iostream> #include "message.h" #include "krazki.h" using namespace std; int block_depth(int i,int NOD){ for (int j=1;(j<=i)&&(j<=NOD);j++){ if (HoleDiameter(i-j+1)<DiscDiameter(j)) return i-1; } return -1; } int main() { int liczba=NumberOfNodes(); int PH=PipeHeight(); int NOD=NumberOfDiscs(); if (liczba>PH) liczba=PH; if (MyNodeId()<liczba){ int result=block_depth(MyNodeId()+1,NOD); for (int i=MyNodeId()+1+liczba;(i<=PH)&&(result==-1);i=i+liczba){ int result2=block_depth(i,NOD); result=result2; } if (MyNodeId()>0){ PutInt(0, result); Send(0); } else { for (int instancja = 1; instancja < liczba; ++instancja) { Receive(instancja); int result2=GetInt(instancja); if (((result2<result)&&(result2!=-1))||((result==-1)&&(result2!=-1))) result=result2; } if (result==-1) { if (PH>=NOD) cout<<PH-NOD+1<<endl; else cout<<0<<endl; } else if (result-NOD<0) cout<<0<<endl; else cout<<result-NOD+1<<endl; } } return 0; } |