#include <iostream> #include "message.h" #include <vector> #include "skup.h" void sortowanie( int tab[100000], int left, int right ) { int i = left; int j = right; int x = tab[( left + right ) / 2 ]; do { while( tab[ i ] < x ) i++; while( tab[ j ] > x ) j--; if( i <= j ){ int pom=tab[i]; tab[i]=tab[j]; tab[j]=tab[i]; i++; j--; } } while( i <= j ); if( left < j ) sortowanie( tab, left, j ); if( right > i ) sortowanie( tab, i, right ); } using namespace std; int main() { vector < int > panstwa; vector < int > firmy; int NON=NumberOfNodes(); int MNI=MyNodeId(); if (MNI<NON){ panstwa.push_back(MNI); firmy.push_back(MNI); firmy.push_back(NumberOfCompanies()); for (int i=0;i<NumberOfCompanies();i++){ firmy.push_back(GetShareCost(i)); } if ((MNI-1)>=0){ int i=MNI-1; Receive(i); int ilosc_panstw=GetInt(i); for(int k=0;k<ilosc_panstw;k++){ int nr_panstwa=GetInt(i); int nalezy=0; for (int l=0;l<panstwa.size();l++){ if(panstwa[l]==nr_panstwa) { nalezy=0; break; } } if (nalezy==0){ panstwa.push_back(nr_panstwa); firmy.push_back(nr_panstwa); int ilosc_firm=GetInt(i); firmy.push_back(ilosc_firm); for(int j=0;j<ilosc_firm;j++){ firmy.push_back(GetInt(i)); } } else{ int ilosc_firm=GetInt(i); for(int j=0;j<ilosc_firm;j++){ int x; x=GetInt(i); } } } if (panstwa.size()==NON){ int T[100000]; int k=0; int kv=0; for (int i=0;i<panstwa.size();i++){ kv++; int firmykv=firmy[kv]; kv++; for(int j=0;j<firmykv;j++){ T[k]=panstwa[kv]; k++;kv++; } } k; sortowanie(T,0,k); long long suma=0; for(int i=0;i<k;i++){ suma+=(k-i)*T[i]; } cout<<suma; } if (MNI+1<NON){ int i=MNI+1; PutInt(i,panstwa.size()); for (int j=0;j<firmy.size();j++){ PutInt(i,firmy[j]); } Send(i); } } } 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 | #include <iostream> #include "message.h" #include <vector> #include "skup.h" void sortowanie( int tab[100000], int left, int right ) { int i = left; int j = right; int x = tab[( left + right ) / 2 ]; do { while( tab[ i ] < x ) i++; while( tab[ j ] > x ) j--; if( i <= j ){ int pom=tab[i]; tab[i]=tab[j]; tab[j]=tab[i]; i++; j--; } } while( i <= j ); if( left < j ) sortowanie( tab, left, j ); if( right > i ) sortowanie( tab, i, right ); } using namespace std; int main() { vector < int > panstwa; vector < int > firmy; int NON=NumberOfNodes(); int MNI=MyNodeId(); if (MNI<NON){ panstwa.push_back(MNI); firmy.push_back(MNI); firmy.push_back(NumberOfCompanies()); for (int i=0;i<NumberOfCompanies();i++){ firmy.push_back(GetShareCost(i)); } if ((MNI-1)>=0){ int i=MNI-1; Receive(i); int ilosc_panstw=GetInt(i); for(int k=0;k<ilosc_panstw;k++){ int nr_panstwa=GetInt(i); int nalezy=0; for (int l=0;l<panstwa.size();l++){ if(panstwa[l]==nr_panstwa) { nalezy=0; break; } } if (nalezy==0){ panstwa.push_back(nr_panstwa); firmy.push_back(nr_panstwa); int ilosc_firm=GetInt(i); firmy.push_back(ilosc_firm); for(int j=0;j<ilosc_firm;j++){ firmy.push_back(GetInt(i)); } } else{ int ilosc_firm=GetInt(i); for(int j=0;j<ilosc_firm;j++){ int x; x=GetInt(i); } } } if (panstwa.size()==NON){ int T[100000]; int k=0; int kv=0; for (int i=0;i<panstwa.size();i++){ kv++; int firmykv=firmy[kv]; kv++; for(int j=0;j<firmykv;j++){ T[k]=panstwa[kv]; k++;kv++; } } k; sortowanie(T,0,k); long long suma=0; for(int i=0;i<k;i++){ suma+=(k-i)*T[i]; } cout<<suma; } if (MNI+1<NON){ int i=MNI+1; PutInt(i,panstwa.size()); for (int j=0;j<firmy.size();j++){ PutInt(i,firmy[j]); } Send(i); } } } return 0; } |