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