#include<iostream> #include<algorithm> #include<vector> #define pb push_back #define st first #define nd second #define mp make_pair #define PII pair<int,int> #define LL long long #include "kanapka.h" #include "message.h" using namespace std; //**atrapa /* int NN,smak[100],mojnum,nodes; int NumberOfNodes(){ return nodes; } int wpisz_test(){ cin>>NN>>mojnum>>nodes; for(int i=0;i<NN;i++)cin>>smak[i]; } int GetN(){ return NN; } int GetTaste(int x){ return smak[x]; } int MyNodeId(){ return mojnum; } void PutLL(int t,LL x){ cout<<"send "<<t<<" "<<x<<"\n"; } LL GetLL(int t){ cout<<"prosze o LL od "<<t<<"\n"; LL x; cin>>x; return x; } void Receive(int t){ } void Send(int t){ } */ //** vector<LL>v,wyn,pocz,kon; LL MAX(LL a,LL b){ if(a>b)return a; return b; } void wczytaj_czesc(){ int n=GetN(),p=NumberOfNodes(),nr=MyNodeId(); if(p>n){ p=n; if(nr>=p)return; } LL sum=0,akt=0,res=0,mpref=0,msuf=0; PII prz=mp((n/p)*nr,(n/p)*(nr+1)-1); if(nr==p-1)prz.nd=n-1; for(int i=prz.st;i<=prz.nd;i++){ int x=GetTaste(i); sum+=x; mpref=MAX(sum,mpref); akt-=x; if(akt<0)akt=0; res=MAX(res,akt); } akt=0; for(int i=prz.nd;i>=prz.st;i--){ int x=GetTaste(i); akt+=x; msuf=MAX(akt,msuf); } res=sum+res; PutLL(0,res); PutLL(0,sum); PutLL(0,mpref); PutLL(0,msuf); Send(0); } main(){ //wpisz_test(); wczytaj_czesc(); if(MyNodeId()!=0)return 0; v.clear(); LL res=0; int n=NumberOfNodes(); if(n>GetN())n=GetN(); for(int i=0;i<n;i++){ Receive(i); wyn.pb(GetLL(i)); v.pb(GetLL(i)); pocz.pb(GetLL(i)); kon.pb(GetLL(i)); res+=v[i]; } for(int i=0;i<n;i++){ LL akt=0; akt+=wyn[i]; for(int j=0;j<i;j++)akt+=v[j]; for(int j=i+1;j<n;j++)akt+=v[j]; res=MAX(res,akt); } for(int i=0;i<n;i++){ for(int j=i+1;j<n;j++){ LL akt=pocz[i]+kon[j]; for(int k=0;k<i;k++)akt+=v[k]; for(int k=j+1;k<n;k++)akt+=v[k]; res=MAX(res,akt); } } cout<<MAX(0,res)<<"\n"; }
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 105 106 107 108 109 110 111 112 113 114 115 116 | #include<iostream> #include<algorithm> #include<vector> #define pb push_back #define st first #define nd second #define mp make_pair #define PII pair<int,int> #define LL long long #include "kanapka.h" #include "message.h" using namespace std; //**atrapa /* int NN,smak[100],mojnum,nodes; int NumberOfNodes(){ return nodes; } int wpisz_test(){ cin>>NN>>mojnum>>nodes; for(int i=0;i<NN;i++)cin>>smak[i]; } int GetN(){ return NN; } int GetTaste(int x){ return smak[x]; } int MyNodeId(){ return mojnum; } void PutLL(int t,LL x){ cout<<"send "<<t<<" "<<x<<"\n"; } LL GetLL(int t){ cout<<"prosze o LL od "<<t<<"\n"; LL x; cin>>x; return x; } void Receive(int t){ } void Send(int t){ } */ //** vector<LL>v,wyn,pocz,kon; LL MAX(LL a,LL b){ if(a>b)return a; return b; } void wczytaj_czesc(){ int n=GetN(),p=NumberOfNodes(),nr=MyNodeId(); if(p>n){ p=n; if(nr>=p)return; } LL sum=0,akt=0,res=0,mpref=0,msuf=0; PII prz=mp((n/p)*nr,(n/p)*(nr+1)-1); if(nr==p-1)prz.nd=n-1; for(int i=prz.st;i<=prz.nd;i++){ int x=GetTaste(i); sum+=x; mpref=MAX(sum,mpref); akt-=x; if(akt<0)akt=0; res=MAX(res,akt); } akt=0; for(int i=prz.nd;i>=prz.st;i--){ int x=GetTaste(i); akt+=x; msuf=MAX(akt,msuf); } res=sum+res; PutLL(0,res); PutLL(0,sum); PutLL(0,mpref); PutLL(0,msuf); Send(0); } main(){ //wpisz_test(); wczytaj_czesc(); if(MyNodeId()!=0)return 0; v.clear(); LL res=0; int n=NumberOfNodes(); if(n>GetN())n=GetN(); for(int i=0;i<n;i++){ Receive(i); wyn.pb(GetLL(i)); v.pb(GetLL(i)); pocz.pb(GetLL(i)); kon.pb(GetLL(i)); res+=v[i]; } for(int i=0;i<n;i++){ LL akt=0; akt+=wyn[i]; for(int j=0;j<i;j++)akt+=v[j]; for(int j=i+1;j<n;j++)akt+=v[j]; res=MAX(res,akt); } for(int i=0;i<n;i++){ for(int j=i+1;j<n;j++){ LL akt=pocz[i]+kon[j]; for(int k=0;k<i;k++)akt+=v[k]; for(int k=j+1;k<n;k++)akt+=v[k]; res=MAX(res,akt); } } cout<<MAX(0,res)<<"\n"; } |