#include "kanapka.h" #include "message.h" #include <algorithm> #include <iostream> using namespace std; int main() { long long int Dlugosc_kanapki=GetN(); long long int i,inst; long long int wynik=0; long long int wynik1=0; long long int pom,minusowe=0,dodatnie=0;; for(i=0+MyNodeId();i<Dlugosc_kanapki-1;i+=NumberOfNodes()) { if(GetTaste(i)>0&&minusowe==0) { wynik=wynik+GetTaste(i); } else { if(GetTaste(i+1)>0) { if(wynik+GetTaste(i)+GetTaste(i+1)+minusowe+dodatnie>wynik) { wynik=wynik+GetTaste(i)+GetTaste(i+1)+minusowe+dodatnie; minusowe=0; dodatnie=0; i=i+1; continue; } else { if(GetTaste(i)<0){ minusowe=minusowe+GetTaste(i); } else dodatnie=dodatnie+GetTaste(i); } } else { if(GetTaste(i)<0){ minusowe=minusowe+GetTaste(i); } else dodatnie=dodatnie+GetTaste(i); } } } if(MyNodeId()>0) { PutLL(0,wynik); Send(0); } else{ for(inst=1;inst<NumberOfNodes();++inst) { Receive(inst); wynik+=GetLL(inst); } } pom=i; minusowe=0; dodatnie=0; //for(i=0+MyNodeId();i<Dlugosc_kanapki-1;i+=NumberOfNodes()) for(i=Dlugosc_kanapki-1+MyNodeId();i>pom;i-=NumberOfNodes()) { if(GetTaste(i)>0&&minusowe==0) { wynik1=wynik1+GetTaste(i); } else { if(GetTaste(i+1)>0) { if(wynik1+GetTaste(i)+GetTaste(i+1)+minusowe+dodatnie>wynik) { wynik1=wynik1+GetTaste(i)+GetTaste(i+1)+minusowe+dodatnie; minusowe=0; dodatnie=0; i=i+1; continue; } else { if(GetTaste(i)<0){ minusowe=minusowe+GetTaste(i); } else dodatnie=dodatnie+GetTaste(i); } } else { if(GetTaste(i)<0){ minusowe=minusowe+GetTaste(i); } else dodatnie=dodatnie+GetTaste(i); } } } if(MyNodeId()>0) { PutLL(0,wynik); Send(0); } else{ for(inst;inst<NumberOfNodes();++inst) { Receive(inst); wynik1+=GetLL(inst); } } wynik=wynik+wynik1; return wynik; }
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 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 | #include "kanapka.h" #include "message.h" #include <algorithm> #include <iostream> using namespace std; int main() { long long int Dlugosc_kanapki=GetN(); long long int i,inst; long long int wynik=0; long long int wynik1=0; long long int pom,minusowe=0,dodatnie=0;; for(i=0+MyNodeId();i<Dlugosc_kanapki-1;i+=NumberOfNodes()) { if(GetTaste(i)>0&&minusowe==0) { wynik=wynik+GetTaste(i); } else { if(GetTaste(i+1)>0) { if(wynik+GetTaste(i)+GetTaste(i+1)+minusowe+dodatnie>wynik) { wynik=wynik+GetTaste(i)+GetTaste(i+1)+minusowe+dodatnie; minusowe=0; dodatnie=0; i=i+1; continue; } else { if(GetTaste(i)<0){ minusowe=minusowe+GetTaste(i); } else dodatnie=dodatnie+GetTaste(i); } } else { if(GetTaste(i)<0){ minusowe=minusowe+GetTaste(i); } else dodatnie=dodatnie+GetTaste(i); } } } if(MyNodeId()>0) { PutLL(0,wynik); Send(0); } else{ for(inst=1;inst<NumberOfNodes();++inst) { Receive(inst); wynik+=GetLL(inst); } } pom=i; minusowe=0; dodatnie=0; //for(i=0+MyNodeId();i<Dlugosc_kanapki-1;i+=NumberOfNodes()) for(i=Dlugosc_kanapki-1+MyNodeId();i>pom;i-=NumberOfNodes()) { if(GetTaste(i)>0&&minusowe==0) { wynik1=wynik1+GetTaste(i); } else { if(GetTaste(i+1)>0) { if(wynik1+GetTaste(i)+GetTaste(i+1)+minusowe+dodatnie>wynik) { wynik1=wynik1+GetTaste(i)+GetTaste(i+1)+minusowe+dodatnie; minusowe=0; dodatnie=0; i=i+1; continue; } else { if(GetTaste(i)<0){ minusowe=minusowe+GetTaste(i); } else dodatnie=dodatnie+GetTaste(i); } } else { if(GetTaste(i)<0){ minusowe=minusowe+GetTaste(i); } else dodatnie=dodatnie+GetTaste(i); } } } if(MyNodeId()>0) { PutLL(0,wynik); Send(0); } else{ for(inst;inst<NumberOfNodes();++inst) { Receive(inst); wynik1+=GetLL(inst); } } wynik=wynik+wynik1; return wynik; } |