#include "skup.h" #include "message.h" #include <iostream> #include <vector> #include <set> #include <algorithm> using namespace std; int main() { vector <int> t_do_wyslania; vector < vector <int> > t_prawidlowe; set<int> zbior; set<int>::iterator it_zbior; //Kompletowanie danych dotycz¹cych danej instancji t_do_wyslania.push_back(MyNodeId()); t_do_wyslania.push_back(NumberOfCompanies()); for (int i = 0; i < NumberOfCompanies(); i++){ t_do_wyslania.push_back(GetShareCost(i)); } zbior.insert(MyNodeId()); t_prawidlowe.push_back(t_do_wyslania); //Wyslanie wynikow do wszystkich innych instancji for (int j = 0; j < NumberOfNodes(); j++){ if (j != MyNodeId()){ for (int i = 0;i < t_do_wyslania.size(); i++){ PutInt(j, t_do_wyslania[i]); } Send(j); } } vector <int> t_odebrane; int wartosc_odebrana; int instancja; int ile_firm; //Pobieranie danych od ka¿dej innej instancji dotyczace tej instancji for (int nadawca = 0; nadawca < NumberOfNodes(); ++nadawca) { if (nadawca != MyNodeId()){ Receive(nadawca); instancja = GetInt(nadawca); t_odebrane.push_back(instancja); ile_firm = GetInt(nadawca); t_odebrane.push_back(ile_firm); for (int i = 0; i < ile_firm; i++){ t_odebrane.push_back(GetInt(nadawca)); } if (ile_firm != 0){ it_zbior = zbior.find(instancja); if (it_zbior == zbior.end()){ zbior.insert(instancja); t_prawidlowe.push_back(t_odebrane); } } for (int j = 0; j < NumberOfNodes(); j++){ if ((j != MyNodeId()) && (j != nadawca)){ for (int i = 0; i < t_odebrane.size(); i++){ PutInt(j, t_odebrane[i]); } Send(j); } } t_odebrane.clear(); } } //Pobieranie danych z kazdej innej instancji o wszystkich trzecich instanacjach for (int nadawca = 0; nadawca < NumberOfNodes(); ++nadawca) { if (nadawca != MyNodeId()){ for (int i = 0; i < NumberOfNodes()-1; ++i) { Receive(nadawca); instancja = GetInt(nadawca); t_odebrane.push_back(instancja); ile_firm = GetInt(nadawca); t_odebrane.push_back(ile_firm); for (int i = 0; i < ile_firm; i++){ t_odebrane.push_back(GetInt(nadawca)); } if (ile_firm != 0){ it_zbior = zbior.find(instancja); if (it_zbior == zbior.end()){ zbior.insert(instancja); t_prawidlowe.push_back(t_odebrane); } } t_odebrane.clear(); } } } vector <int> t_akcje; vector <int> t_pom; long long suma = 0; int k = 1; //Trzeba znalezc pierwsza instancje, ktora bedzie miala komplet danych i dokonac analizy danych oraz wyslac wynik na wyjscie //Jak zachowa sie system, gdy bedzie wiecej takich instancji? if (zbior.size() == NumberOfNodes()) { for (int i = 0; i < t_prawidlowe.size(); i++){ t_pom = t_prawidlowe[i]; for (int j = 0; j < t_pom.size()-2; j++){ t_akcje.push_back(t_pom[j]); } } sort(t_akcje.begin(), t_akcje.end()); for (int j=t_akcje.size()-1; j >= 0; j++){ suma += t_akcje[j] * k; k++; } cout << suma << "\n"; } }
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 | #include "skup.h" #include "message.h" #include <iostream> #include <vector> #include <set> #include <algorithm> using namespace std; int main() { vector <int> t_do_wyslania; vector < vector <int> > t_prawidlowe; set<int> zbior; set<int>::iterator it_zbior; //Kompletowanie danych dotycz¹cych danej instancji t_do_wyslania.push_back(MyNodeId()); t_do_wyslania.push_back(NumberOfCompanies()); for (int i = 0; i < NumberOfCompanies(); i++){ t_do_wyslania.push_back(GetShareCost(i)); } zbior.insert(MyNodeId()); t_prawidlowe.push_back(t_do_wyslania); //Wyslanie wynikow do wszystkich innych instancji for (int j = 0; j < NumberOfNodes(); j++){ if (j != MyNodeId()){ for (int i = 0;i < t_do_wyslania.size(); i++){ PutInt(j, t_do_wyslania[i]); } Send(j); } } vector <int> t_odebrane; int wartosc_odebrana; int instancja; int ile_firm; //Pobieranie danych od ka¿dej innej instancji dotyczace tej instancji for (int nadawca = 0; nadawca < NumberOfNodes(); ++nadawca) { if (nadawca != MyNodeId()){ Receive(nadawca); instancja = GetInt(nadawca); t_odebrane.push_back(instancja); ile_firm = GetInt(nadawca); t_odebrane.push_back(ile_firm); for (int i = 0; i < ile_firm; i++){ t_odebrane.push_back(GetInt(nadawca)); } if (ile_firm != 0){ it_zbior = zbior.find(instancja); if (it_zbior == zbior.end()){ zbior.insert(instancja); t_prawidlowe.push_back(t_odebrane); } } for (int j = 0; j < NumberOfNodes(); j++){ if ((j != MyNodeId()) && (j != nadawca)){ for (int i = 0; i < t_odebrane.size(); i++){ PutInt(j, t_odebrane[i]); } Send(j); } } t_odebrane.clear(); } } //Pobieranie danych z kazdej innej instancji o wszystkich trzecich instanacjach for (int nadawca = 0; nadawca < NumberOfNodes(); ++nadawca) { if (nadawca != MyNodeId()){ for (int i = 0; i < NumberOfNodes()-1; ++i) { Receive(nadawca); instancja = GetInt(nadawca); t_odebrane.push_back(instancja); ile_firm = GetInt(nadawca); t_odebrane.push_back(ile_firm); for (int i = 0; i < ile_firm; i++){ t_odebrane.push_back(GetInt(nadawca)); } if (ile_firm != 0){ it_zbior = zbior.find(instancja); if (it_zbior == zbior.end()){ zbior.insert(instancja); t_prawidlowe.push_back(t_odebrane); } } t_odebrane.clear(); } } } vector <int> t_akcje; vector <int> t_pom; long long suma = 0; int k = 1; //Trzeba znalezc pierwsza instancje, ktora bedzie miala komplet danych i dokonac analizy danych oraz wyslac wynik na wyjscie //Jak zachowa sie system, gdy bedzie wiecej takich instancji? if (zbior.size() == NumberOfNodes()) { for (int i = 0; i < t_prawidlowe.size(); i++){ t_pom = t_prawidlowe[i]; for (int j = 0; j < t_pom.size()-2; j++){ t_akcje.push_back(t_pom[j]); } } sort(t_akcje.begin(), t_akcje.end()); for (int j=t_akcje.size()-1; j >= 0; j++){ suma += t_akcje[j] * k; k++; } cout << suma << "\n"; } } |