#include <iostream> #include <climits> #include "message.h" #include "kanapka.h" using namespace std; int main() { if (MyNodeId() > 0) { long long MachineItems = 0; Receive(0); MachineItems = GetLL(0); for (long long ActionID = 0; ActionID < MachineItems; ActionID++) { bool Reverse = false; long long Overall = 0; long long ItemsLength = 0; Receive(0); ItemsLength = GetLL(0); for (long long CurrentItem = 0; CurrentItem < ItemsLength; CurrentItem++) { if (!Reverse) { Overall = Overall + GetTaste(CurrentItem); } else { Overall = Overall + GetTaste(ItemsLength - CurrentItem); } Reverse = !Reverse; } Send(0); PutLL(0, Overall); } } else { int MachinesCount = NumberOfNodes(); long long ItemsLength = GetN(); long long MachineItems = ItemsLength / MachinesCount; long long MachinesOverallItems = ItemsLength; for (long long MachineID = 1; MachineID < MachinesCount; MachineID++) { if (MachinesOverallItems > MachineItems) { Send(MachineID); PutLL(MachineID, MachineItems); } else { Send(MachineID); PutLL(MachineID, MachinesOverallItems); } MachinesOverallItems = MachinesOverallItems - MachineItems; } long long FirstItemCount = 0; for (long long MachineID = 1; MachineID < MachinesCount; MachineID++) { Send(MachineID); PutLL(MachineID, FirstItemCount); FirstItemCount++; } long long MaxResult = LLONG_MIN; long long MachineFID = 1; for (long long ItemCount = FirstItemCount; ItemCount < ItemsLength; ItemCount++) { if (MachineFID > (MachinesCount - 1)) { MachineFID = 1; } Receive(MachineFID); if (GetLL(MachineFID) > MaxResult) { MaxResult = GetLL(MachineFID); } Send(MachineFID); PutLL(MachineFID, ItemCount); MachineFID++; } cout << MaxResult; } 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 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 | #include <iostream> #include <climits> #include "message.h" #include "kanapka.h" using namespace std; int main() { if (MyNodeId() > 0) { long long MachineItems = 0; Receive(0); MachineItems = GetLL(0); for (long long ActionID = 0; ActionID < MachineItems; ActionID++) { bool Reverse = false; long long Overall = 0; long long ItemsLength = 0; Receive(0); ItemsLength = GetLL(0); for (long long CurrentItem = 0; CurrentItem < ItemsLength; CurrentItem++) { if (!Reverse) { Overall = Overall + GetTaste(CurrentItem); } else { Overall = Overall + GetTaste(ItemsLength - CurrentItem); } Reverse = !Reverse; } Send(0); PutLL(0, Overall); } } else { int MachinesCount = NumberOfNodes(); long long ItemsLength = GetN(); long long MachineItems = ItemsLength / MachinesCount; long long MachinesOverallItems = ItemsLength; for (long long MachineID = 1; MachineID < MachinesCount; MachineID++) { if (MachinesOverallItems > MachineItems) { Send(MachineID); PutLL(MachineID, MachineItems); } else { Send(MachineID); PutLL(MachineID, MachinesOverallItems); } MachinesOverallItems = MachinesOverallItems - MachineItems; } long long FirstItemCount = 0; for (long long MachineID = 1; MachineID < MachinesCount; MachineID++) { Send(MachineID); PutLL(MachineID, FirstItemCount); FirstItemCount++; } long long MaxResult = LLONG_MIN; long long MachineFID = 1; for (long long ItemCount = FirstItemCount; ItemCount < ItemsLength; ItemCount++) { if (MachineFID > (MachinesCount - 1)) { MachineFID = 1; } Receive(MachineFID); if (GetLL(MachineFID) > MaxResult) { MaxResult = GetLL(MachineFID); } Send(MachineFID); PutLL(MachineFID, ItemCount); MachineFID++; } cout << MaxResult; } return 0; } |