#include "message.h"
#include "maklib.h"
#include <cstdio>
#include <algorithm>
using namespace std;
int main()
{
int n = Size(), a;
int ile = n / NumberOfNodes() ;
int x = ile * ( MyNodeId() + 1 );
if ( MyNodeId() == NumberOfNodes() - 1 ) x = n;
long long int pre=0, suma=0, MAX=0, suf=0, z;
for (int i = 1 + ile * MyNodeId() ; i <= x ; i++ )
{
a = ElementAt( i );
suma+=a;
pre = max( pre, suma );
suf+=a;
suf = max( 0LL, suf );
MAX = max( MAX, suf );
}
if ( MyNodeId() > 0 )
{
PutLL(0, pre );
PutLL(0, suma );
PutLL(0, MAX );
PutLL(0, suf );
Send( 0 );
}
else
{
for (int i = 1; i < NumberOfNodes(); i ++ )
{
Receive( i );
z = GetLL( i );
MAX = max( MAX, suf + z );
z = GetLL( i );
suma += z;
suf += z;
z = GetLL( i );
MAX = max( MAX, z );
z = GetLL( i );
suf = max( suf, z );
}
printf("%lld\n",MAX);
}
}
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 | #include "message.h" #include "maklib.h" #include <cstdio> #include <algorithm> using namespace std; int main() { int n = Size(), a; int ile = n / NumberOfNodes() ; int x = ile * ( MyNodeId() + 1 ); if ( MyNodeId() == NumberOfNodes() - 1 ) x = n; long long int pre=0, suma=0, MAX=0, suf=0, z; for (int i = 1 + ile * MyNodeId() ; i <= x ; i++ ) { a = ElementAt( i ); suma+=a; pre = max( pre, suma ); suf+=a; suf = max( 0LL, suf ); MAX = max( MAX, suf ); } if ( MyNodeId() > 0 ) { PutLL(0, pre ); PutLL(0, suma ); PutLL(0, MAX ); PutLL(0, suf ); Send( 0 ); } else { for (int i = 1; i < NumberOfNodes(); i ++ ) { Receive( i ); z = GetLL( i ); MAX = max( MAX, suf + z ); z = GetLL( i ); suma += z; suf += z; z = GetLL( i ); MAX = max( MAX, z ); z = GetLL( i ); suf = max( suf, z ); } printf("%lld\n",MAX); } } |
English