[Noti-aed] Holsman Juan Manuel TPL ejercicio PROM_SUBC

Juan Holsman holsman97 en gmail.com
Mar Nov 22 17:13:25 -03 2022


------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://venus.santafe-conicet.gov.ar/pipermail/noti-aed/attachments/20221122/ff296cf6/attachment-0001.html>
------------ próxima parte ------------
#define USECHRONO
#undef HAVE_MPI

#include "eval.hpp"
#include <cassert>
#include <climits>
#include <cstdlib>
#include <stack>
#include <unistd.h>

#include <set>
#include <list>
using namespace aed;
using namespace std;

//---:---<*>---:---<*>- COMIENZA CODIGO FUNCION --:---<*>---:---<*>---:---<*>
// COMPLETAR DNI y NOMBRE AQUI:
// Nombre: Bob Esponja
int DNI=23456789;

//---:---<*>---:---<*>---:---<*>---:---<*>---:---<*>





void subk(set<int> &S, set<int> C, set<int>::iterator itS, list<set<int>> &LK) 
{
  if (itS == S.end()) return;
  //   LK.insert(LK.begin(),C); 
  
  //almacena set actual
  set<int> 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,C,itS,LK);		
  
  //Rama 2: no agregando
  subk(S,D,itS,LK);							
  
}


//wrapper
list<set<int>> subk(set<int> &S) 
{	
  set<int> C;
  C.clear();
  
  list<set<int>> LK;		
  set<int>::iterator itS = S.begin();		
  subk(S,C,itS,LK);	
  return LK;	
}
  




bool prom_subc(set<int> &S) {
  // COMPLETAR
  int sum=0;
  set<int>::iterator it=S.begin();
  while(it!=S.end()){
    sum+=*it;
    it++;
  }
  int t=S.size();
  int prom=sum/t;
  if(prom==0 || prom==-0) return true;
  
   

   
   list<set<int>> LK= subk(S);
   list<set<int>>::iterator itLK=LK.begin();
   
   while(itLK!=LK.end()){
    set<int>saux= *itLK;
    set<int>::iterator itS=saux.begin();
    int sum=0;
    while(itS!=saux.end()){
     
     sum+=*itS;
     itS++;
   }
   
   if(sum==prom) return true;
   itLK++;
  }
  
 
  
 
 
  return false;
  
}


int main() {
  Eval ev;
  int vrbs = 0;
  ev.eval<1>(prom_subc,vrbs);
  return 0;
}


Más información sobre la lista de distribución Noti-AED