#include <bits/stdc++.h>
#include "kanapka.h"
#include "message.h"
using namespace std;
typedef long long ll;
pair<ll, ll> divide(ll n) {
  auto f = [](ll n, int i, int k) { return n * i / k; };
  return make_pair(f(n, MyNodeId(), NumberOfNodes()),
      f(n, MyNodeId() + 1, NumberOfNodes()));
}
int main() {
  // Local computation
  ll nl, nr;
  tie(nl, nr) = divide(GetN());
  // Total and left max
  {
    ll s = 0, sl = 0, sr = 0, sans = 0;
    for (ll i = nl; i < nr; ++i) {
      ll x = -GetTaste(i);;
      s += x;
      sl = max(sl, s);
      sr = max(sr + x, 0LL);
      sans = max(sans, sr);
    }
    // Send it, and compute!
    PutLL(0, s);
    PutLL(0, sl);
    PutLL(0, sr);
    PutLL(0, sans);
    // printf("[%lld, %lld): %lld %lld %lld %lld\n", nl, nr, s, sl, sr, sans);
    Send(0);
  }
  // DP
  if (MyNodeId() == 0) {
    ll ans = 0, dp = 0, total = 0;
    for (int i = 0; i < NumberOfNodes(); ++i) {
      Receive(i);
      ll ts = GetLL(i);
      ll tsl = GetLL(i);
      ll tsr = GetLL(i);
      ll tsans = GetLL(i);
      ans = max(ans, max(tsans, dp + tsl));
      dp = max(dp + ts, tsr);
      total += ts;
    }
    printf("%lld\n", -(total - ans));
  }
  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 | #include <bits/stdc++.h> #include "kanapka.h" #include "message.h" using namespace std; typedef long long ll; pair<ll, ll> divide(ll n) { auto f = [](ll n, int i, int k) { return n * i / k; }; return make_pair(f(n, MyNodeId(), NumberOfNodes()), f(n, MyNodeId() + 1, NumberOfNodes())); } int main() { // Local computation ll nl, nr; tie(nl, nr) = divide(GetN()); // Total and left max { ll s = 0, sl = 0, sr = 0, sans = 0; for (ll i = nl; i < nr; ++i) { ll x = -GetTaste(i);; s += x; sl = max(sl, s); sr = max(sr + x, 0LL); sans = max(sans, sr); } // Send it, and compute! PutLL(0, s); PutLL(0, sl); PutLL(0, sr); PutLL(0, sans); // printf("[%lld, %lld): %lld %lld %lld %lld\n", nl, nr, s, sl, sr, sans); Send(0); } // DP if (MyNodeId() == 0) { ll ans = 0, dp = 0, total = 0; for (int i = 0; i < NumberOfNodes(); ++i) { Receive(i); ll ts = GetLL(i); ll tsl = GetLL(i); ll tsr = GetLL(i); ll tsans = GetLL(i); ans = max(ans, max(tsans, dp + tsl)); dp = max(dp + ts, tsr); total += ts; } printf("%lld\n", -(total - ans)); } return 0; } | 
 
            
         English
                    English