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