#include<iostream> #include "maklib.h" #include "message.h" using namespace std; void check ( long long zbiorek) { if (zbiorek<0) zbiorek = 0; } int Size(); int ElementAt(); int main() { long long *tab; long long wynik = 0; long long maks2 = 0; long long sumama = 0; long long temp, temp2; long long suma = 0; long long maks = 0; long long liczba_przedzialow = NumberOfNodes(); long long N = Size(); long long poczatek = (MyNodeId()*N)/liczba_przedzialow; long long koniec = ((MyNodeId()+1)*N)/liczba_przedzialow; for(int i = poczatek;i<koniec;i++) { suma += ElementAt(i); if(maks<maks+ElementAt(i)) maks += ElementAt(i); check(maks); } for(int r = NumberOfNodes(); r>=0; r--) { if (MyNodeId != 0) { PutLL(0,maks); PutLL(0,suma); Send(0);Send(0); } else { tab = new long long[NumberOfNodes()]; tab[0]=maks; for(int q = 1;q<=NumberOfNodes();q++) { Receive(q); temp = GetLL(q); tab[q] = temp; Receive(q); temp2 = GetLL(q); sumama +=temp2; } } } for(int w = 0;w<NumberOfNodes();w++) { maks2+=tab[w]; check(maks2); } wynik = sumama; for(int x=0;x<NumberOfNodes();x++) { if(tab[x]>wynik) { wynik = tab[x]; } } if(wynik<maks2) wynik = maks2; cout<<wynik; }
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<iostream> #include "maklib.h" #include "message.h" using namespace std; void check ( long long zbiorek) { if (zbiorek<0) zbiorek = 0; } int Size(); int ElementAt(); int main() { long long *tab; long long wynik = 0; long long maks2 = 0; long long sumama = 0; long long temp, temp2; long long suma = 0; long long maks = 0; long long liczba_przedzialow = NumberOfNodes(); long long N = Size(); long long poczatek = (MyNodeId()*N)/liczba_przedzialow; long long koniec = ((MyNodeId()+1)*N)/liczba_przedzialow; for(int i = poczatek;i<koniec;i++) { suma += ElementAt(i); if(maks<maks+ElementAt(i)) maks += ElementAt(i); check(maks); } for(int r = NumberOfNodes(); r>=0; r--) { if (MyNodeId != 0) { PutLL(0,maks); PutLL(0,suma); Send(0);Send(0); } else { tab = new long long[NumberOfNodes()]; tab[0]=maks; for(int q = 1;q<=NumberOfNodes();q++) { Receive(q); temp = GetLL(q); tab[q] = temp; Receive(q); temp2 = GetLL(q); sumama +=temp2; } } } for(int w = 0;w<NumberOfNodes();w++) { maks2+=tab[w]; check(maks2); } wynik = sumama; for(int x=0;x<NumberOfNodes();x++) { if(tab[x]>wynik) { wynik = tab[x]; } } if(wynik<maks2) wynik = maks2; cout<<wynik; } |