#include "teatr.h"
#include "message.h"
#include <iostream>
using namespace std;
int wieksze[5];
int rowne[6];
int main()
{
int n = GetN();
int nodes = 100;
int instance = MyNodeId();
int amount = n / nodes;
int begin = instance * amount;
int end = instance * amount + amount;
if (instance == nodes - 1) {
end += n % nodes;
}
int wynikNode = 0;
for (int k = begin; k < end; k++) {
int wzrost = GetElement(k);
for (int l = wzrost - 1; l >= 0; l--) {
wieksze[l]++;
}
rowne[wzrost]++;
wynikNode += wieksze[wzrost];
}
if (instance != 0)
{
PutInt(0, wynikNode);
for (int l = 0; l < 6; l++) {
PutInt(0, rowne[l]);
}
for (int l = 0; l < 5; l++) {
PutInt(0, wieksze[l]);
}
Send(0);
}
else
{
long long wynik = wynikNode;
for (int k = 1; k < nodes; k++)
{
Receive(k);
int wynikChild;
wynikChild = GetInt(k);
wynik += wynikChild;
for (int l = 0; l < 6; l++) {
int rowneChild = GetInt(k);
rowne[l] += rowneChild;
wynik += rowneChild * wieksze[l];
}
for (int l = 0; l < 5; l++) {
wieksze[l] += GetInt(k);
}
}
cout << wynik << 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 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 | #include "teatr.h" #include "message.h" #include <iostream> using namespace std; int wieksze[5]; int rowne[6]; int main() { int n = GetN(); int nodes = 100; int instance = MyNodeId(); int amount = n / nodes; int begin = instance * amount; int end = instance * amount + amount; if (instance == nodes - 1) { end += n % nodes; } int wynikNode = 0; for (int k = begin; k < end; k++) { int wzrost = GetElement(k); for (int l = wzrost - 1; l >= 0; l--) { wieksze[l]++; } rowne[wzrost]++; wynikNode += wieksze[wzrost]; } if (instance != 0) { PutInt(0, wynikNode); for (int l = 0; l < 6; l++) { PutInt(0, rowne[l]); } for (int l = 0; l < 5; l++) { PutInt(0, wieksze[l]); } Send(0); } else { long long wynik = wynikNode; for (int k = 1; k < nodes; k++) { Receive(k); int wynikChild; wynikChild = GetInt(k); wynik += wynikChild; for (int l = 0; l < 6; l++) { int rowneChild = GetInt(k); rowne[l] += rowneChild; wynik += rowneChild * wieksze[l]; } for (int l = 0; l < 5; l++) { wieksze[l] += GetInt(k); } } cout << wynik << endl; } return 0; } |
English