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