#define USECHRONO #undef HAVE_MPI #include "eval.hpp" #include #include #include #include #include using namespace aed; using namespace std; //---:---<*>---:---<*>- COMIENZA CODIGO FUNCION --:---<*>---:---<*>---:---<*> // COMPLETAR DNI y NOMBRE AQUI: // Nombre: Lautaro Rodríguez int DNI=43578848; //auxiliar void subk(set &S, int k, set C, set::iterator itS, list> &LK) { if (itS == S.end()) return; if (k == 0) { LK.insert(LK.begin(),C); return;} //almacena set actual set D = C; //agrego *itS a C C.insert(C.end(), *itS); itS++; // se agrega C a la lista si C.size = k if (C.size() == k) LK.insert(LK.end(),C); //bifurcación: //Rama 1: agregando subk(S,k,C,itS,LK); //Rama 2: no agregando subk(S,k,D,itS,LK); } //wrapper list> subk(set &S, int k) { set C; C.clear(); list> LK; set::iterator itS = S.begin(); subk(S,k,C,itS,LK); return LK; } //---:---<*>---:---<*>---:---<*>---:---<*>---:---<*> /* Implementar una funcion bool prom_subc(set &S) que dado un conjunto S, determine si existe un subconjunto de S para el cual la suma de sus elementos sea la parte entera del promedio de S. Ejemplos: S:[-9,0,3,7,8] -> true S:[-10,-8,-3,8,9] -> true S:[-4,0,2,8] -> false */ list> unir_subconjuntos(set &S){ list>todossubconjuntos; if(S.empty())return todossubconjuntos; for(int i=0;i>aux=subk(S,i); todossubconjuntos.insert(todossubconjuntos.end(),aux.begin(),aux.end()); } return todossubconjuntos; } int obtener_suma(set C){ int suma=0; if(C.empty())return suma; for( set::iterator it=C.begin(); it!=C.end(); ++it ){ suma+=*it; } return suma; } float obtener_promedio(set C){ float prom=0; if(C.empty())return prom; for( set::iterator it=C.begin(); it!=C.end(); ++it ) { prom+=*it; } prom=prom/C.size(); return prom; } bool prom_subc(set &S) { int promedio=obtener_promedio(S); auto todossubconjuntos=unir_subconjuntos(S); for( auto it=todossubconjuntos.begin(); it!=todossubconjuntos.end(); ++it ) { if(promedio==obtener_suma(*it)){ return true; } } return false; } int main() { Eval ev; int vrbs = 0; ev.eval<1>(prom_subc,vrbs); return 0; }