#include<stdio.h>
#include<iostream>
#include<limits.h>
#include "kanapka.h"
#include "message.h"
using namespace std;
int main()
{
long long n = GetN();
long long leftMax[n];
long long rightMax[n];
long long leftMaxIndex[n];
long long rightMaxIndex[n];
long long sum = 0;
long long max = LLONG_MIN;
long long maxIndex = -1;
for(long long i = 0; i<n; ++i){
sum+=GetTaste(i);
if( sum > max){
max = sum;
maxIndex = i;
}
leftMax[i] = max;
// cout << "LeftMax: " << i << " " << max << "\n";
leftMaxIndex[i] = maxIndex;
}
sum = 0;
max = LLONG_MIN;
maxIndex = -1;
for(long long i = n-1; i>=0; --i){
sum+=GetTaste(i);
if( sum > max){
max = sum;
maxIndex = i;
}
rightMax[i] = max;
// cout << "RightMax: " << i << " " << max << "\n";
rightMaxIndex[i] = maxIndex;
}
long long maxBalance = LLONG_MIN;
for(long long firstRight = 0; firstRight<=n; ++firstRight){
long long lastLeft = firstRight -1;
long long rightAmount;
long long leftAmount;
if(firstRight > n-1) {
rightAmount = 0;
}else{
rightAmount = rightMax[firstRight];
}
if(lastLeft < 0){
leftAmount = 0;
}else{
leftAmount = leftMax[lastLeft];
}
long long balance = leftAmount + rightAmount;
if(balance > maxBalance){
maxBalance = balance;
}
}
if(MyNodeId() == 0){
cout << maxBalance;
}
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 | #include<stdio.h> #include<iostream> #include<limits.h> #include "kanapka.h" #include "message.h" using namespace std; int main() { long long n = GetN(); long long leftMax[n]; long long rightMax[n]; long long leftMaxIndex[n]; long long rightMaxIndex[n]; long long sum = 0; long long max = LLONG_MIN; long long maxIndex = -1; for(long long i = 0; i<n; ++i){ sum+=GetTaste(i); if( sum > max){ max = sum; maxIndex = i; } leftMax[i] = max; // cout << "LeftMax: " << i << " " << max << "\n"; leftMaxIndex[i] = maxIndex; } sum = 0; max = LLONG_MIN; maxIndex = -1; for(long long i = n-1; i>=0; --i){ sum+=GetTaste(i); if( sum > max){ max = sum; maxIndex = i; } rightMax[i] = max; // cout << "RightMax: " << i << " " << max << "\n"; rightMaxIndex[i] = maxIndex; } long long maxBalance = LLONG_MIN; for(long long firstRight = 0; firstRight<=n; ++firstRight){ long long lastLeft = firstRight -1; long long rightAmount; long long leftAmount; if(firstRight > n-1) { rightAmount = 0; }else{ rightAmount = rightMax[firstRight]; } if(lastLeft < 0){ leftAmount = 0; }else{ leftAmount = leftMax[lastLeft]; } long long balance = leftAmount + rightAmount; if(balance > maxBalance){ maxBalance = balance; } } if(MyNodeId() == 0){ cout << maxBalance; } return 0; } |
English