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