tpl120190905.cpp
#define USECHRONO
#undef HAVE_MPI
#include "eval.hpp"
#include <cassert>
#include <climits>
#include <cstdlib>
#include <stack>
#include <map>
/* COMIENZO DE DESCRIPCION
__USE_WIKI__
#pareto:# Se dice que un punto #x=(x1,x2,..,xn)#
#n-dimensional domina a otro punto y=(y1,y2,..,yn)# si se
cumple que, todas las componentes de #x# son menores o
iguales que las de #y# y al menos una de ellas es menor estricta.
Dado un conjunto de vectores encontrar el frente de
Pareto del conjunto, es decir todos los #x# tales que no
son dominados por otro vector del conjunto.
#merge-kway:# Implementar una funcion void
#merge_kway(vector< queue<int> > &qords,queue<int> &merged)# que dado
un vector de colas ordenadas #ordqs,# obtener la cola #merged#
resultante de la fusion de todas las colas en una sola, de forma de
que los elementos siguen ordenadas.
#is-balanced:# Dado un string #expr,# implementar una funcion
#bool is_balanced(string &expr);# que determine si todos los
pares de parentesis, llaves y corchetes estan bien balanceados.
[Tomado en el Trabajo Practico de Laboratorio Nro 1
(TPL1) de 2019-09-05].
keywords: lista, pila, cola
FIN DE DESCRIPCION */
using namespace aed;
using namespace std;
bool domina(vector<int> x, vector<int> y){
int ndim = x.size();
bool flag = false;
for(int k=0;k<ndim;k++){
if (x[k] < y[k]) flag = true;
if (x[k] > y[k]) break;
}
return flag;
}
list<vector<int>> Pareto(list<vector<int>>&L){
list<vector<int>> Lout;
list<vector<int>>::iterator it = L.begin();
while(it!=L.end()){
bool es_dominado = false;
list<vector<int>>::iterator it2 = L.begin();
while(it2!=L.end()){
if(domina(*it2,*it)){
es_dominado = true;
break;
}
it2++;
}
if(!es_dominado) Lout.push_back(*it);
it++;
}
return Lout;
}
//---:---<*>---:---<*>---:---<*>---:---<*>---:---<*>
void merge_kway(vector< queue<int> > &qords,
queue<int> &merged) {
merged = queue<int>();
while (true) {
int minindx=-1, minfront;
int nq = qords.size();
for (int j=0; j<nq; j++) {
queue<int> &q = qords[j];
if (!q.empty()) {
if (minindx<0 || q.front()<minfront) {
minindx = j;
minfront = q.front();
}
}
}
// Todas las colas esan vacias
if (minindx<0) return;
merged.push(minfront);
qords[minindx].pop();
}
}
//---:---<*>---:---<*>---:---<*>---:---<*>---:---<*>
void merge_kway2(vector< queue<int> > &qords,
queue<int> &merged) {
merged = queue<int>();
while (true) {
auto q = qords.begin();
while (q!=qords.end()) {
if (q->empty()) qords.erase(q);
else q++;
}
if (qords.empty()) return;
int minindx=-1, minfront;
int nq = qords.size();
for (int j=0; j<nq; j++) {
queue<int> &q = qords[j];
if (minindx<0 || q.front()<minfront) {
minindx = j;
minfront = q.front();
}
}
merged.push(minfront);
qords[minindx].pop();
}
}
//---:---<*>---:---<*>---:---<*>---:---<*>---:---<*>
bool is_balanced(string &c) {
stack<char> s;
for(unsigned int i=0; i<c.length(); i++){
if(c[i]=='(' || c[i]=='{' || c[i]=='[') s.push(c[i]);
else if(c[i]==')') {
if (!s.empty() && s.top()=='(') s.pop();
else return false;
} else if(c[i]=='}') {
if (!s.empty() && s.top()=='{') s.pop();
else return false;
} else if(c[i]==']') {
if (!s.empty() && s.top()=='[') s.pop();
else return false;
}
}
return s.empty();
}
//---:---<*>---:---<*>---:---<*>---:---<*>---:---<*>
int main() {
Eval ev;
int vrbs = 0;
int seed = 123;
int h1=0,h2=0,h3=0;
cout << "seed: 123" << endl;
do {
ev.eval<1>(Pareto,vrbs);
h1 = ev.evalr<1>(Pareto,seed,vrbs);
ev.eval<2>(merge_kway,vrbs);
h2 = ev.evalr<2>(merge_kway,seed,vrbs);
ev.eval<3>(is_balanced,vrbs);
h3 = ev.evalr<3>(is_balanced,seed,vrbs);
printf("S=%03d -> H1=%03d H2=%03d H3=%03d\n",
seed,h1,h2,h3);
cout << endl << "Siguiente seed: ";
} while (cin>>seed);
return 0;
}
Generated by GNU Enscript 1.6.6.