#include <iostream>
#include <vector>
#include "message.h"
#include "dzialka.h"
int main() {
std::size_t height = GetFieldHeight();
std::size_t width = GetFieldWidth();
std::size_t nodes = NumberOfNodes();
long long result = 0;
for (std::size_t i = MyNodeId(); i < height; i += nodes) {
std::vector<long long> bars;
bars.reserve(width);
for (std::size_t j = 0; j < width; ++j) {
std::size_t k = i;
for (; k < height; ++k) {
if (!IsUsableCell(k, j)) {
break;
}
}
bars.push_back(k - i);
}
for (std::size_t end = width; end > 0; --end) {
for (std::size_t j = 0; j < end; ++j) {
result += bars[j];
}
for (std::size_t j = 0; j + 1 < end; ++j) {
bars[j] = std::min(bars[j], bars[j + 1]);
}
}
}
if (MyNodeId() != 0) {
PutLL(0, result);
Send(0);
}
else {
for (std::size_t i = 1; i < nodes; ++i) {
Receive(i);
result += GetLL(i);
}
std::cout << result << "\n";
}
}
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 | #include <iostream> #include <vector> #include "message.h" #include "dzialka.h" int main() { std::size_t height = GetFieldHeight(); std::size_t width = GetFieldWidth(); std::size_t nodes = NumberOfNodes(); long long result = 0; for (std::size_t i = MyNodeId(); i < height; i += nodes) { std::vector<long long> bars; bars.reserve(width); for (std::size_t j = 0; j < width; ++j) { std::size_t k = i; for (; k < height; ++k) { if (!IsUsableCell(k, j)) { break; } } bars.push_back(k - i); } for (std::size_t end = width; end > 0; --end) { for (std::size_t j = 0; j < end; ++j) { result += bars[j]; } for (std::size_t j = 0; j + 1 < end; ++j) { bars[j] = std::min(bars[j], bars[j + 1]); } } } if (MyNodeId() != 0) { PutLL(0, result); Send(0); } else { for (std::size_t i = 1; i < nodes; ++i) { Receive(i); result += GetLL(i); } std::cout << result << "\n"; } } |
English