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