#include<cstdio> #include "message.h" #include "dzialka.h" using namespace std; int main() { int w = GetFieldWidth(); int h = GetFieldHeight(); int nodes_num = NumberOfNodes(); int my_id = MyNodeId(); int part_size = (h - 1) / nodes_num + 1; int part_start = my_id * part_size; bool* row = new bool[w](); long long result = 0ll; for (int i = part_start; i < part_start + part_size && i < h; i++) { for (int j = 0; j < w; j++) { row[j] = true; } for (int t = i; t < h; t++) { for (int j = 0; j < w; j++) { row[j] = row[j] && IsUsableCell(t, j); } int curr_usable = 0; for (int j = 0; j < w; j++) { if (row[j]) { curr_usable++; } else if (curr_usable > 0) { result += curr_usable * (curr_usable + 1) / 2; curr_usable = 0; //printf("[%d][%d] -> res=%lld\n", i, j, result); } //printf("%d ", field[i][j]); } if (curr_usable > 0) { result += curr_usable * (curr_usable + 1) / 2; //printf("[%d] -> res=%lld\n", i, result); } //printf("\n"); } } if (my_id > 0) { PutLL(0, result); Send(0); } else { for (int i = 1; i < nodes_num; i++) { Receive(i); result += GetLL(i); } printf("%lld\n", result); } 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 | #include<cstdio> #include "message.h" #include "dzialka.h" using namespace std; int main() { int w = GetFieldWidth(); int h = GetFieldHeight(); int nodes_num = NumberOfNodes(); int my_id = MyNodeId(); int part_size = (h - 1) / nodes_num + 1; int part_start = my_id * part_size; bool* row = new bool[w](); long long result = 0ll; for (int i = part_start; i < part_start + part_size && i < h; i++) { for (int j = 0; j < w; j++) { row[j] = true; } for (int t = i; t < h; t++) { for (int j = 0; j < w; j++) { row[j] = row[j] && IsUsableCell(t, j); } int curr_usable = 0; for (int j = 0; j < w; j++) { if (row[j]) { curr_usable++; } else if (curr_usable > 0) { result += curr_usable * (curr_usable + 1) / 2; curr_usable = 0; //printf("[%d][%d] -> res=%lld\n", i, j, result); } //printf("%d ", field[i][j]); } if (curr_usable > 0) { result += curr_usable * (curr_usable + 1) / 2; //printf("[%d] -> res=%lld\n", i, result); } //printf("\n"); } } if (my_id > 0) { PutLL(0, result); Send(0); } else { for (int i = 1; i < nodes_num; i++) { Receive(i); result += GetLL(i); } printf("%lld\n", result); } return 0; } |