#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; } |