#include <cstdio> #include <algorithm> #include "message.h" #include "kanapka.h" using namespace std; long long l[105],p[105],cal[105],lp[105],t[10000000]; int main() { int a,b,c,d,e,f,g,n,ile,pp,k; long long w,naj,naj2,cale,wyn; n=GetN(); ile=(n+NumberOfNodes()-1)/NumberOfNodes(); pp=MyNodeId()*ile; k=min(n,pp+ile); naj=w=cale=0; for (a=pp; a<k; a++) { t[a-pp]=naj; c=GetTaste(a); cale+=c; w+=c; naj=max(naj,w); } if (MyNodeId()) { PutLL(0,cale); PutLL(0,naj); } else { cal[0]=cale; l[0]=naj; } naj2=naj; w=naj=0; for (a=k-1; a>=pp; a--) { c=GetTaste(a); w+=c; naj=max(naj,w); naj2=max(naj2,t[a-pp]+naj); } if (MyNodeId()) { PutLL(0,naj); PutLL(0,naj2); Send(0); } else { p[0]=naj; lp[0]=naj2; for (a=1; a<NumberOfNodes(); a++) { Receive(a); cal[a]=GetLL(a); l[a]=GetLL(a); p[a]=GetLL(a); lp[a]=GetLL(a); } w=wyn=0; for (a=0; a<NumberOfNodes(); a++) w+=cal[a]; wyn=max(w,wyn); for (a=0; a<NumberOfNodes(); a++) wyn=max(wyn,w-cal[a]+lp[a]); for (a=0; a<NumberOfNodes(); a++) for (b=NumberOfNodes()-1; b>a; b--) { w=0; for (c=0; c<a; c++) w+=cal[c]; w+=l[a]; for (c=NumberOfNodes()-1; c>b; c--) w+=cal[c]; w+=p[b]; wyn=max(w,wyn); } printf ("%lld", wyn); } 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 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 | #include <cstdio> #include <algorithm> #include "message.h" #include "kanapka.h" using namespace std; long long l[105],p[105],cal[105],lp[105],t[10000000]; int main() { int a,b,c,d,e,f,g,n,ile,pp,k; long long w,naj,naj2,cale,wyn; n=GetN(); ile=(n+NumberOfNodes()-1)/NumberOfNodes(); pp=MyNodeId()*ile; k=min(n,pp+ile); naj=w=cale=0; for (a=pp; a<k; a++) { t[a-pp]=naj; c=GetTaste(a); cale+=c; w+=c; naj=max(naj,w); } if (MyNodeId()) { PutLL(0,cale); PutLL(0,naj); } else { cal[0]=cale; l[0]=naj; } naj2=naj; w=naj=0; for (a=k-1; a>=pp; a--) { c=GetTaste(a); w+=c; naj=max(naj,w); naj2=max(naj2,t[a-pp]+naj); } if (MyNodeId()) { PutLL(0,naj); PutLL(0,naj2); Send(0); } else { p[0]=naj; lp[0]=naj2; for (a=1; a<NumberOfNodes(); a++) { Receive(a); cal[a]=GetLL(a); l[a]=GetLL(a); p[a]=GetLL(a); lp[a]=GetLL(a); } w=wyn=0; for (a=0; a<NumberOfNodes(); a++) w+=cal[a]; wyn=max(w,wyn); for (a=0; a<NumberOfNodes(); a++) wyn=max(wyn,w-cal[a]+lp[a]); for (a=0; a<NumberOfNodes(); a++) for (b=NumberOfNodes()-1; b>a; b--) { w=0; for (c=0; c<a; c++) w+=cal[c]; w+=l[a]; for (c=NumberOfNodes()-1; c>b; c--) w+=cal[c]; w+=p[b]; wyn=max(w,wyn); } printf ("%lld", wyn); } return 0; } |