// dzi.cpp // // Autor: Jakub Chmist // Utworzony 24.11.2017 #include "message.h" #include "dzialka.h" #include <iostream> //#include <algorithm> //#include <array> //#include <cmath> //#include <iomanip> using namespace std; int m; // ilość wierszy int n; // ilość kolumn long long suma_przyd = 0; // suma przydatnosci dla wszystkich podmacierzy int main() { m = GetFieldHeight(); n = GetFieldWidth(); int **t_A = new int *[m]; for ( int i = 0; i < m; ++i ){ t_A[i] = new int [n]; for ( int j = 0; j < n; ++j){ t_A[i][j] = IsUsableCell(i, j); } } int t_wiersze; // do sprawdzania pola "1" w kolejnych wierszach int t_kolumny; // do sprawdzania pola "1" w kolejnych kolumnach for (int wp = 1 + MyNodeId(); wp <= m; wp += NumberOfNodes()){ for (int kp = 1; kp <= n; kp++){ t_wiersze = 0; t_kolumny = 0; for (int e = 0; e < wp; e++){ for (int f = 0; f < kp; f++){ t_wiersze += t_A[e][f]; } } //dane po pierwzsej podmacierzy (bazowej) if (t_wiersze == wp * kp){ suma_przyd++; } //dla kolejnych wierszy for (int i = 0; i < m - wp + 1; i++) { //cout <<"i: " << i << endl; //jezeli wiersz > 0 to zwieksz wiersz (zmniejsz przydatnosc bazowa dla usuwanego wiersza i zwieksz dla dodawanego wiersza) // t_kolumny = t_wiersze; if (i > 0){ for (int f = 0; f < kp; f++){ //dla wiersza wycofywanego podmacierzy if (t_A[i-1][f] == 1) { t_wiersze--; } //dla nowego wiersza podmacierzy if (t_A[i+wp-1][f] == 1) { t_wiersze++; } } if (t_wiersze == wp * kp){ suma_przyd++; } } //cout << "W: " << suma_przyd << "\n"; for (int j = 1; j < n - kp + 1; j++){ //cout << "j: " << i << endl; //jezeli kolumna > 0 to zwieksz kolumne (zmiejsza rozrodnosc dla usuwanej kolumny i zwieksza dla dodawanej kolumny) //pzepisuje do tablicy używanej dla kolejnych kolumn if (j==1) { t_kolumny = t_wiersze; } for (int e = i; e < i + wp; e++){ if (t_A[e][j-1] == 1) { t_kolumny--; } if (t_A[e][j+kp-1] == 1) { t_kolumny++; } } if (t_kolumny == wp * kp){ suma_przyd++; } //cout << "K: " << suma_przyd << "\n"; } } } } //wyswietlenie wynikow if (MyNodeId() > 0) { PutInt(0, suma_przyd); Send(0); } else { for (int instancja = 1; instancja < NumberOfNodes(); ++instancja) { Receive(instancja); suma_przyd += GetInt(instancja); } cout << suma_przyd << "\n"; } //niszczenie tablic dynamicznych for ( int i(0); i < m; ++i ) { delete [] t_A[i]; } delete [] t_A; // t_A = NULL; }
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 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 | // dzi.cpp // // Autor: Jakub Chmist // Utworzony 24.11.2017 #include "message.h" #include "dzialka.h" #include <iostream> //#include <algorithm> //#include <array> //#include <cmath> //#include <iomanip> using namespace std; int m; // ilość wierszy int n; // ilość kolumn long long suma_przyd = 0; // suma przydatnosci dla wszystkich podmacierzy int main() { m = GetFieldHeight(); n = GetFieldWidth(); int **t_A = new int *[m]; for ( int i = 0; i < m; ++i ){ t_A[i] = new int [n]; for ( int j = 0; j < n; ++j){ t_A[i][j] = IsUsableCell(i, j); } } int t_wiersze; // do sprawdzania pola "1" w kolejnych wierszach int t_kolumny; // do sprawdzania pola "1" w kolejnych kolumnach for (int wp = 1 + MyNodeId(); wp <= m; wp += NumberOfNodes()){ for (int kp = 1; kp <= n; kp++){ t_wiersze = 0; t_kolumny = 0; for (int e = 0; e < wp; e++){ for (int f = 0; f < kp; f++){ t_wiersze += t_A[e][f]; } } //dane po pierwzsej podmacierzy (bazowej) if (t_wiersze == wp * kp){ suma_przyd++; } //dla kolejnych wierszy for (int i = 0; i < m - wp + 1; i++) { //cout <<"i: " << i << endl; //jezeli wiersz > 0 to zwieksz wiersz (zmniejsz przydatnosc bazowa dla usuwanego wiersza i zwieksz dla dodawanego wiersza) // t_kolumny = t_wiersze; if (i > 0){ for (int f = 0; f < kp; f++){ //dla wiersza wycofywanego podmacierzy if (t_A[i-1][f] == 1) { t_wiersze--; } //dla nowego wiersza podmacierzy if (t_A[i+wp-1][f] == 1) { t_wiersze++; } } if (t_wiersze == wp * kp){ suma_przyd++; } } //cout << "W: " << suma_przyd << "\n"; for (int j = 1; j < n - kp + 1; j++){ //cout << "j: " << i << endl; //jezeli kolumna > 0 to zwieksz kolumne (zmiejsza rozrodnosc dla usuwanej kolumny i zwieksza dla dodawanej kolumny) //pzepisuje do tablicy używanej dla kolejnych kolumn if (j==1) { t_kolumny = t_wiersze; } for (int e = i; e < i + wp; e++){ if (t_A[e][j-1] == 1) { t_kolumny--; } if (t_A[e][j+kp-1] == 1) { t_kolumny++; } } if (t_kolumny == wp * kp){ suma_przyd++; } //cout << "K: " << suma_przyd << "\n"; } } } } //wyswietlenie wynikow if (MyNodeId() > 0) { PutInt(0, suma_przyd); Send(0); } else { for (int instancja = 1; instancja < NumberOfNodes(); ++instancja) { Receive(instancja); suma_przyd += GetInt(instancja); } cout << suma_przyd << "\n"; } //niszczenie tablic dynamicznych for ( int i(0); i < m; ++i ) { delete [] t_A[i]; } delete [] t_A; // t_A = NULL; } |