#include "kanapka.h" #include "message.h" #include <cstdio> #include <cstdlib> #include <cstring> int main () { int liczba_nodow = NumberOfNodes(); int nr_instancji = MyNodeId(); long long int *tab = (long long int *) malloc(sizeof(long long int) * liczba_nodow * 3); memset(tab, 0, sizeof(long long int) * liczba_nodow * 3); long long int N = GetN(); // [A, B) long long int A = nr_instancji * N / liczba_nodow; long long int B = (nr_instancji + 1) * N / liczba_nodow; long long int suma = 0; long long int max = 0; long long int spadek = 0; long long int pozostalo = 0; for (long long int i = A; i < B; i++) { suma += GetTaste(i); max = suma > max ? suma : max; long long int biezacy_spadek = suma - max; spadek = biezacy_spadek < spadek ? biezacy_spadek : spadek; } pozostalo = suma - max - spadek; if (nr_instancji > 0) { PutLL(0, max); PutLL(0, spadek); PutLL(0, pozostalo); Send(0); } if (nr_instancji == 0) { int j = 0; tab[j++] = max; tab[j++] = spadek; tab[j++] = pozostalo; for (int i = 1; i < liczba_nodow; i++) { Receive(i); tab[j++] = GetLL(i); tab[j++] = GetLL(i); tab[j++] = GetLL(i); } suma = 0; max = 0; spadek = 0; for (int i = 0; i < liczba_nodow * 3; i++) { suma += tab[i]; max = suma > max ? suma : max; long long int biezacy_spadek = suma - max; spadek = biezacy_spadek < spadek ? biezacy_spadek : spadek; } printf("%lld", suma - spadek); } 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 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 | #include "kanapka.h" #include "message.h" #include <cstdio> #include <cstdlib> #include <cstring> int main () { int liczba_nodow = NumberOfNodes(); int nr_instancji = MyNodeId(); long long int *tab = (long long int *) malloc(sizeof(long long int) * liczba_nodow * 3); memset(tab, 0, sizeof(long long int) * liczba_nodow * 3); long long int N = GetN(); // [A, B) long long int A = nr_instancji * N / liczba_nodow; long long int B = (nr_instancji + 1) * N / liczba_nodow; long long int suma = 0; long long int max = 0; long long int spadek = 0; long long int pozostalo = 0; for (long long int i = A; i < B; i++) { suma += GetTaste(i); max = suma > max ? suma : max; long long int biezacy_spadek = suma - max; spadek = biezacy_spadek < spadek ? biezacy_spadek : spadek; } pozostalo = suma - max - spadek; if (nr_instancji > 0) { PutLL(0, max); PutLL(0, spadek); PutLL(0, pozostalo); Send(0); } if (nr_instancji == 0) { int j = 0; tab[j++] = max; tab[j++] = spadek; tab[j++] = pozostalo; for (int i = 1; i < liczba_nodow; i++) { Receive(i); tab[j++] = GetLL(i); tab[j++] = GetLL(i); tab[j++] = GetLL(i); } suma = 0; max = 0; spadek = 0; for (int i = 0; i < liczba_nodow * 3; i++) { suma += tab[i]; max = suma > max ? suma : max; long long int biezacy_spadek = suma - max; spadek = biezacy_spadek < spadek ? biezacy_spadek : spadek; } printf("%lld", suma - spadek); } return 0; } |