// Błędne rozwiązanie do zadania Działka 2. // Na pojedynczym węźle wypisuje liczbę dostępnych kwadracików. #include "dzialka.h" #include "message.h" #include <iostream> #include <vector> #include <algorithm> using namespace std; int main() { if (MyNodeId() > 0) return 0; const int max_x = GetFieldWidth(); const int max_y = GetFieldHeight(); vector<vector<int>> max_extend; max_extend.resize(max_y); for(auto &x: max_extend) { x.resize(max_x); } for (int y = 0; y < max_y; ++y) { for (int x = 0; x < max_x; ++x) { int ext = 0; int fwd_x = x; // find max extend from this field while (fwd_x < max_x && IsUsableCell(y, fwd_x)) { fwd_x++; ext++; } while(x < fwd_x) { max_extend[y][x++] = ext--; } } } // for (int y = 0; y < max_y; ++y) { // for (int x = 0; x < max_x; ++x) { // fprintf(stderr, "%d\t", max_extend[y][x]); // } // fprintf(stderr, "\n"); // } long long result = 0; for (int start_y = 0; start_y < max_y; ++start_y) { for (int start_x = 0; start_x < max_x; ++start_x) { if (!IsUsableCell(start_y, start_x)) continue; int max_width = max_x-start_x; for (int end_y = start_y; end_y < max_y && IsUsableCell(end_y, start_x); ++end_y) { max_width = std::min(max_width, max_extend[end_y][start_x]); // fprintf(stderr, "(%d %d) -> %d width: %d\n", start_x, start_y, end_y, max_width); result += max_width; } } } 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 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 | // Błędne rozwiązanie do zadania Działka 2. // Na pojedynczym węźle wypisuje liczbę dostępnych kwadracików. #include "dzialka.h" #include "message.h" #include <iostream> #include <vector> #include <algorithm> using namespace std; int main() { if (MyNodeId() > 0) return 0; const int max_x = GetFieldWidth(); const int max_y = GetFieldHeight(); vector<vector<int>> max_extend; max_extend.resize(max_y); for(auto &x: max_extend) { x.resize(max_x); } for (int y = 0; y < max_y; ++y) { for (int x = 0; x < max_x; ++x) { int ext = 0; int fwd_x = x; // find max extend from this field while (fwd_x < max_x && IsUsableCell(y, fwd_x)) { fwd_x++; ext++; } while(x < fwd_x) { max_extend[y][x++] = ext--; } } } // for (int y = 0; y < max_y; ++y) { // for (int x = 0; x < max_x; ++x) { // fprintf(stderr, "%d\t", max_extend[y][x]); // } // fprintf(stderr, "\n"); // } long long result = 0; for (int start_y = 0; start_y < max_y; ++start_y) { for (int start_x = 0; start_x < max_x; ++start_x) { if (!IsUsableCell(start_y, start_x)) continue; int max_width = max_x-start_x; for (int end_y = start_y; end_y < max_y && IsUsableCell(end_y, start_x); ++end_y) { max_width = std::min(max_width, max_extend[end_y][start_x]); // fprintf(stderr, "(%d %d) -> %d width: %d\n", start_x, start_y, end_y, max_width); result += max_width; } } } std::cout << result << "\n"; } |