#include<iostream>
#include "maklib.h"
#include "message.h"
#define LL long long int
int main(){
std::ios_base::sync_with_stdio(false);
LL wynik=0,prefiks=0,sufiks=0,calosc=0;
unsigned int N=Size();
unsigned int p=MyNodeId()*(N/NumberOfNodes());
unsigned int k=(MyNodeId()+1)*(N/NumberOfNodes());
if(MyNodeId()==NumberOfNodes()-1) k=N;
LL local_wynik=0;
for(unsigned int i=p+1;i<=k;++i){
if((calosc+=(LL)ElementAt(i))>prefiks) prefiks=calosc;
local_wynik=std::max((LL)0,local_wynik+(LL)ElementAt(i));
if(local_wynik>wynik)wynik=local_wynik;
}
local_wynik=0;
for(unsigned int i=k;i>p;--i)
if((local_wynik+=(LL)ElementAt(i))>sufiks) sufiks=local_wynik;
if(MyNodeId()>0){
PutLL(0,wynik);
PutLL(0,prefiks);
PutLL(0,sufiks);
PutLL(0,calosc);
Send(0);
}
else{
prefiks=sufiks;
for(int i=1;i<NumberOfNodes();++i){
Receive(i);
wynik=std::max(wynik,GetLL(i));
wynik=std::max(wynik,prefiks+GetLL(i));
LL t_sufiks=GetLL(i);
prefiks=std::max(t_sufiks,prefiks+GetLL(i));
}
std::cout<<wynik<<"\n";
}
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 | #include<iostream> #include "maklib.h" #include "message.h" #define LL long long int int main(){ std::ios_base::sync_with_stdio(false); LL wynik=0,prefiks=0,sufiks=0,calosc=0; unsigned int N=Size(); unsigned int p=MyNodeId()*(N/NumberOfNodes()); unsigned int k=(MyNodeId()+1)*(N/NumberOfNodes()); if(MyNodeId()==NumberOfNodes()-1) k=N; LL local_wynik=0; for(unsigned int i=p+1;i<=k;++i){ if((calosc+=(LL)ElementAt(i))>prefiks) prefiks=calosc; local_wynik=std::max((LL)0,local_wynik+(LL)ElementAt(i)); if(local_wynik>wynik)wynik=local_wynik; } local_wynik=0; for(unsigned int i=k;i>p;--i) if((local_wynik+=(LL)ElementAt(i))>sufiks) sufiks=local_wynik; if(MyNodeId()>0){ PutLL(0,wynik); PutLL(0,prefiks); PutLL(0,sufiks); PutLL(0,calosc); Send(0); } else{ prefiks=sufiks; for(int i=1;i<NumberOfNodes();++i){ Receive(i); wynik=std::max(wynik,GetLL(i)); wynik=std::max(wynik,prefiks+GetLL(i)); LL t_sufiks=GetLL(i); prefiks=std::max(t_sufiks,prefiks+GetLL(i)); } std::cout<<wynik<<"\n"; } return 0; } |
English