#include "message.h" #include "kanapka.h" #include <bits/stdc++.h> using namespace std; #define rep(i,a,n) for (int i=a;i<n;i++) #define per(i,a,n) for (int i=n-1;i>=a;i--) #define pb push_back #define mp make_pair #define all(x) (x).begin(),(x).end() #define fi first #define se second #define SZ(x) ((int)(x).size()) typedef vector<int> VI; typedef long long ll; typedef pair<int,int> PII; const ll mod=1000000007; ll powmod(ll a,ll b) {ll res=1;a%=mod; assert(b>=0); for(;b;b>>=1){if(b&1)res=res*a%mod;a=a*a%mod;}return res;} ll gcd(ll a,ll b) { return b?gcd(b,a%b):a;} const int nodes = NumberOfNodes(); const int myid = MyNodeId(); int n,l,r; template <typename T> T split(T n, T i, T tot) { return n / tot * i + min(i, n % tot); } int main() { n=GetN(); l=split(n,myid,nodes); r=split(n,myid+1,nodes); ll ans=0,s=0,ls=0,rs=0,cur=0; for (int i=l;i<r;i++) { int x=-GetTaste(i); s=s+x; ls=max(ls,s); cur=max(cur+x,0ll); ans=max(ans,cur); // printf("%lld %d\n",s,x); } s=0; for (int i=r-1;i>=l;i--) { int x=-GetTaste(i); s+=x; rs=max(rs,s); } PutLL(0,s); PutLL(0,ans); PutLL(0,ls); PutLL(0,rs); Send(0); s=0; rs=0; ans=0; if (myid==0) { for (int i=0;i<nodes;i++) { Receive(i); ll cs=GetLL(i); ll cans=GetLL(i); ll cls=GetLL(i); ll crs=GetLL(i); // printf("ff %d %lld %lld %lld %lld\n",i,cs,cans,cls,crs); ans=max(ans,cans); ans=max(ans,rs+cls); rs=max(rs+cs,crs); s+=cs; } printf("%lld\n",-s+ans); } }
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 | #include "message.h" #include "kanapka.h" #include <bits/stdc++.h> using namespace std; #define rep(i,a,n) for (int i=a;i<n;i++) #define per(i,a,n) for (int i=n-1;i>=a;i--) #define pb push_back #define mp make_pair #define all(x) (x).begin(),(x).end() #define fi first #define se second #define SZ(x) ((int)(x).size()) typedef vector<int> VI; typedef long long ll; typedef pair<int,int> PII; const ll mod=1000000007; ll powmod(ll a,ll b) {ll res=1;a%=mod; assert(b>=0); for(;b;b>>=1){if(b&1)res=res*a%mod;a=a*a%mod;}return res;} ll gcd(ll a,ll b) { return b?gcd(b,a%b):a;} const int nodes = NumberOfNodes(); const int myid = MyNodeId(); int n,l,r; template <typename T> T split(T n, T i, T tot) { return n / tot * i + min(i, n % tot); } int main() { n=GetN(); l=split(n,myid,nodes); r=split(n,myid+1,nodes); ll ans=0,s=0,ls=0,rs=0,cur=0; for (int i=l;i<r;i++) { int x=-GetTaste(i); s=s+x; ls=max(ls,s); cur=max(cur+x,0ll); ans=max(ans,cur); // printf("%lld %d\n",s,x); } s=0; for (int i=r-1;i>=l;i--) { int x=-GetTaste(i); s+=x; rs=max(rs,s); } PutLL(0,s); PutLL(0,ans); PutLL(0,ls); PutLL(0,rs); Send(0); s=0; rs=0; ans=0; if (myid==0) { for (int i=0;i<nodes;i++) { Receive(i); ll cs=GetLL(i); ll cans=GetLL(i); ll cls=GetLL(i); ll crs=GetLL(i); // printf("ff %d %lld %lld %lld %lld\n",i,cs,cans,cls,crs); ans=max(ans,cans); ans=max(ans,rs+cls); rs=max(rs+cs,crs); s+=cs; } printf("%lld\n",-s+ans); } } |