#define USECHRONO #undef HAVE_MPI #include "eval.hpp" #include #include #include #include #include #include using namespace aed; using namespace std; //---:---<*>---:---<*>- COMIENZA CODIGO FUNCION --:---<*>---:---<*>---:---<*> // COMPLETAR DNI y NOMBRE AQUI: // Nombre: Jorge Palacios int DNI=43644738; set sort_set(set s) { set temp; while (!s.empty()) { int x = *max_element(s.begin(), s.end()); temp.insert(x); s.erase(x); } return temp; } list> getSubsets(set&S) { list> subset_p; set vacio = {}; subset_p.push_back(vacio); if (S.empty()) { return subset_p; } vector elements(S.begin(), S.end()); for (size_t i = 0; i < (1 << elements.size()); ++i) { set subset; for (size_t j = 0; j < elements.size(); ++j) { if ((i & (1 << j)) > 0) { subset.insert(elements[j]); } } if (subset != S) { subset_p.push_back(subset); } } return subset_p; } int promedio (set &s) { float sum = 0; for(int i : s) { sum += i; } int a = sum/s.size(); return a; } float masCercano(float prom1,float prom2,float prom){ float dist1 = fabs(prom1 - prom); float dist2 = fabs(prom2 - prom); return dist1 < dist2; } bool mayor(setA,setB){ if(A.begin() == A.end()){return false;} if(B.begin() == B.end() && A.begin() != A.end()){return true;} sort_set(A); sort_set(B); auto itA = A.begin(); auto itB = B.begin(); while(itA != A.end()){ if(*itA >*itB){ return true; }else{ itA++; itB++; } } if(itA == A.end() && itB != B.end())return false; if(itA != A.end() && itB == B.end())return true; return false; } void get_largest_subset(set &S, set &C) { if(S.begin() == S.end())return; if(S.size() == 1){C = S; return;} list> subsets = {}; sethigher = {}; subsets = getSubsets(S); auto itSub = subsets.begin(); while(itSub != subsets.end()){ if(masCercano(promedio(*itSub),promedio(higher),promedio(S))){ if(mayor(*itSub,higher)){ higher = *itSub; } } itSub++; } C = higher; } //---:---<*>---:---<*>- FINALIZA CODIGO FUNCION --:---<*>---:---<*>---:---<*> int main() { Eval ev; int vrbs=0; ev.eval<1>(get_largest_subset,vrbs); return 0; }