#include "message.h" #include "maklib.h" #include<cstdio> #include<iostream> using namespace std; long long int P, S, W, C, Pmin=0, pocz, kon, ile, pom, x; int N; long long int pre; long long int suf; long long int licz[6][105]; int main() { ios_base::sync_with_stdio(0); N=Size(); x=NumberOfNodes(); ile=(N+x-2)/(x-1); if(MyNodeId()==0) { long long int wynik=0; for(int i=1; i<=NumberOfNodes()-1; i++) { Receive(i); licz[1][i]=GetInt(i); licz[2][i]=GetInt(i); licz[3][i]=GetInt(i); licz[4][i]=GetInt(i); if(licz[1][i]>wynik) wynik=licz[1][i]; } for(int i=1; i<=NumberOfNodes()-1; i++) { for(int j=i+1; j<=NumberOfNodes()-1; j++) { pom=licz[4][i]+licz[3][j]; for(int t=i+1; t<=(j-1); t++) pom=pom+licz[2][t]; wynik=max(wynik, pom); } } cout << wynik << endl; } else { pocz=1+ile*(MyNodeId()-1); if(N<(ile*MyNodeId())) kon=N; else kon=ile*MyNodeId(); for(int i=1; i<=(kon-pocz)+1; i++) { pre=pre+ElementAt(i+pocz-1); P=max(P,pre); Pmin=min(Pmin,pre); C=max(C, P-Pmin); } for(int i=(kon-pocz)+1; i>=1; i--) { suf=suf+ElementAt(i+pocz-1); S=max(S,suf); } W=suf; PutInt(0,C); PutInt(0,W); PutInt(0,P); PutInt(0,S); Send(0); } 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 76 | #include "message.h" #include "maklib.h" #include<cstdio> #include<iostream> using namespace std; long long int P, S, W, C, Pmin=0, pocz, kon, ile, pom, x; int N; long long int pre; long long int suf; long long int licz[6][105]; int main() { ios_base::sync_with_stdio(0); N=Size(); x=NumberOfNodes(); ile=(N+x-2)/(x-1); if(MyNodeId()==0) { long long int wynik=0; for(int i=1; i<=NumberOfNodes()-1; i++) { Receive(i); licz[1][i]=GetInt(i); licz[2][i]=GetInt(i); licz[3][i]=GetInt(i); licz[4][i]=GetInt(i); if(licz[1][i]>wynik) wynik=licz[1][i]; } for(int i=1; i<=NumberOfNodes()-1; i++) { for(int j=i+1; j<=NumberOfNodes()-1; j++) { pom=licz[4][i]+licz[3][j]; for(int t=i+1; t<=(j-1); t++) pom=pom+licz[2][t]; wynik=max(wynik, pom); } } cout << wynik << endl; } else { pocz=1+ile*(MyNodeId()-1); if(N<(ile*MyNodeId())) kon=N; else kon=ile*MyNodeId(); for(int i=1; i<=(kon-pocz)+1; i++) { pre=pre+ElementAt(i+pocz-1); P=max(P,pre); Pmin=min(Pmin,pre); C=max(C, P-Pmin); } for(int i=(kon-pocz)+1; i>=1; i--) { suf=suf+ElementAt(i+pocz-1); S=max(S,suf); } W=suf; PutInt(0,C); PutInt(0,W); PutInt(0,P); PutInt(0,S); Send(0); } return 0; } |