#include<iostream>
#include<vector>
#include "kanapka.h"
#include "message.h"
using namespace std;
int main()
{
ios_base::sync_with_stdio(0);
long long int N;
N=GetN();
//cout<<"podaj N\n";
//cin>>N;
vector<int>tab;
long long int Nodes;
Nodes=NumberOfNodes();
//cout<<"podaj NumberOfNodes\n";
//cin>>Nodes;
long long int ID;
ID=MyNodeId();
//cout<<"podaj ID\n";
//cin>>ID;
//for(int i2=0;i2<9;i2++)
//{
//cout<<"\t"<<i2<<"\n";
//ID=i2;
if((ID!=0)&&(ID!=Nodes-1))
{
for(long long int i=((long long int)(N/(Nodes-1)))*(ID-1);i<((long long int)(N/(Nodes-1)))*(ID);i++)
{
// cout<<i<<"\n";
tab.push_back(GetTaste(i));
}
}
//}
if(ID==Nodes-1)
{
//cout<<"\t9\n";
for(long long int i=((long long int)(N/(Nodes-1)))*(Nodes-2);i<N;i++)
{
//cout<<i<<"\n";
tab.push_back(GetTaste(i));
}
}
long long int suma,min,kon,kon2,min2;
min=0;
min2=0;
kon=0;
kon2=0;
suma=0;
if(ID!=0)
{
for(int i=tab.size()-1;i>=0;i--)
{
suma+=tab[i];
kon2+=tab[i];
if(kon2<kon)
{
kon=kon2;
}
if(min2+tab[i]<0)
{
min2+=tab[i];
}
else
{
min2=0;
}
if(min2<min)
{
min=min2;
}
}
PutLL(0,suma);
Send(0);
PutLL(0,kon);
Send(0);
PutLL(0,min);
Send(0);
}
long long int suma3,min3,kon3,akt;
akt=0;
if(ID==0)
{
for(int i=1;i<Nodes;i++)
{
Receive(i);
suma3=GetLL(i);
Receive(i);
kon3=GetLL(i);
Receive(i);
min3=GetLL(i);
suma+=suma3;
if(akt+suma3<0)
{
akt+=suma3;
}
else
{
akt=0;
}
if(kon3<akt)
{
akt=kon3;
}
if(akt<min)
{
min=akt;
}
if(min3<min)
{
min=min3;
}
}
cout<<suma-min;
}
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 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 | #include<iostream> #include<vector> #include "kanapka.h" #include "message.h" using namespace std; int main() { ios_base::sync_with_stdio(0); long long int N; N=GetN(); //cout<<"podaj N\n"; //cin>>N; vector<int>tab; long long int Nodes; Nodes=NumberOfNodes(); //cout<<"podaj NumberOfNodes\n"; //cin>>Nodes; long long int ID; ID=MyNodeId(); //cout<<"podaj ID\n"; //cin>>ID; //for(int i2=0;i2<9;i2++) //{ //cout<<"\t"<<i2<<"\n"; //ID=i2; if((ID!=0)&&(ID!=Nodes-1)) { for(long long int i=((long long int)(N/(Nodes-1)))*(ID-1);i<((long long int)(N/(Nodes-1)))*(ID);i++) { // cout<<i<<"\n"; tab.push_back(GetTaste(i)); } } //} if(ID==Nodes-1) { //cout<<"\t9\n"; for(long long int i=((long long int)(N/(Nodes-1)))*(Nodes-2);i<N;i++) { //cout<<i<<"\n"; tab.push_back(GetTaste(i)); } } long long int suma,min,kon,kon2,min2; min=0; min2=0; kon=0; kon2=0; suma=0; if(ID!=0) { for(int i=tab.size()-1;i>=0;i--) { suma+=tab[i]; kon2+=tab[i]; if(kon2<kon) { kon=kon2; } if(min2+tab[i]<0) { min2+=tab[i]; } else { min2=0; } if(min2<min) { min=min2; } } PutLL(0,suma); Send(0); PutLL(0,kon); Send(0); PutLL(0,min); Send(0); } long long int suma3,min3,kon3,akt; akt=0; if(ID==0) { for(int i=1;i<Nodes;i++) { Receive(i); suma3=GetLL(i); Receive(i); kon3=GetLL(i); Receive(i); min3=GetLL(i); suma+=suma3; if(akt+suma3<0) { akt+=suma3; } else { akt=0; } if(kon3<akt) { akt=kon3; } if(akt<min) { min=akt; } if(min3<min) { min=min3; } } cout<<suma-min; } return 0; } |
English