En el problema :
http://juez.oia.unsam.edu.ar/#/task/tanque2/statement
Al tratar de subir una solucion al juez me dio este error de compilacion
In file included from /usr/include/c++/4.8/algorithm:62:0,
from tanque2.cpp:5:
/usr/include/c++/4.8/bits/stl_algo.h: In instantiation of ‘_RandomAccessIterator std::__unguarded_partition(_RandomAccessIterator, _RandomAccessIterator, const _Tp&) [with _RandomAccessIterator = __gnu_cxx::__normal_iterator<cw*, std::vector >; _Tp = cw]’:
/usr/include/c++/4.8/bits/stl_algo.h:2283:70: required from ‘_RandomAccessIterator std::__unguarded_partition_pivot(_RandomAccessIterator, _RandomAccessIterator) [with _RandomAccessIterator = __gnu_cxx::__normal_iterator<cw*, std::vector >]’
/usr/include/c++/4.8/bits/stl_algo.h:2315:54: required from ‘void std::__introsort_loop(_RandomAccessIterator, _RandomAccessIterator, _Size) [with _RandomAccessIterator = __gnu_cxx::__normal_iterator<cw*, std::vector >; _Size = int]’
/usr/include/c++/4.8/bits/stl_algo.h:5461:36: required from ‘void std::sort(_RAIter, _RAIter) [with _RAIter = __gnu_cxx::__normal_iterator<cw*, std::vector >]�
la id de la solucion es 15207
en codeblocks se compila y anda…
Si quieren que les mande el codigo, avisenme…
Alguna sugerencia? Gracias Federico
Edit:
Codigo
#include <algorithm>
#include <iostream>
#include <fstream>
#include <vector>
#define getWeight(name) w[name>>1]
#define getIndex(name) (name<<1)
#define prnt(name) cout << "Printing " << #name << " : ";printVec(name)
#define other(name) ((name)^1)
#define useFile false
using namespace std;
vector<int> e, // edges // los lados de la lista de adjacencia
p, // previous // la ocurrencia anterior
l, // last // la ultima ocurrencia
w, // weight // el peso de las conessiones
o; // filling order // el orden de llenado de los tanques
int ammNodes;
int nodeTRep;
void readInput(const char* filename){
#if useFile
ifstream uniqueInputSource(filename);
#else
#define uniqueInputSource cin
#endif
uniqueInputSource >> ammNodes;
p.resize(2*(ammNodes-1),-1);
l.resize(ammNodes+1,-1);
for (int i=0; i<ammNodes-1; i++){
int f,wt,to;
uniqueInputSource>>f>>wt>>to;
e.push_back(f);
e.push_back(to);
w.push_back(wt);
p[getIndex(i)]=l[f];
l[f]=getIndex(i);
p[other(getIndex(i))]=l[to];
l[to]=other(getIndex(i));
}
uniqueInputSource >> nodeTRep;
#if useFile
uniqueInputSource.close();
#endif
#undef uniqueInputSource
}
struct cw{
int x=0,y=0;
cw(int xx, int yy){
x=xx;y=yy;
}
const bool operator>(const cw &in){
return y>in.y;
}
const bool operator<(const cw &in){
return y<in.y;
}
};
vector<cw> getSortedChildren(int parent){
int currIndex=l[parent];
vector<cw> toSort;
while (currIndex!=-1){
if (currIndex%2==0) // if is the parent and not the child
toSort.push_back(cw(e[other(currIndex)],getWeight(currIndex)));
currIndex=p[currIndex];
}
sort(toSort.begin(), toSort.end());
return toSort;
}
int currentPlace=0;
void solve(int from){
o[currentPlace]=from;
currentPlace--;
vector<cw> children=getSortedChildren(from);
for (unsigned int i=0; i<children.size(); i++){
solve(children[i].x);
}
}
cw finish(){
int tankToChange=o[nodeTRep];
vector<cw> a=getSortedChildren(tankToChange);
if (a.size()) // if has children
return cw(tankToChange,a[0].y-1);
else
return cw(tankToChange,9999); // lo mas abajo
}
void printVec(vector<int> in){
for (unsigned int i=0; i<in.size(); i++)
cout << in[i] << " " << flush;
cout << endl;
}
int main()
{
readInput("input1.in");
o.resize(ammNodes+1,-1);
currentPlace=ammNodes;
solve(1);
cw out=finish();
cout << out.x << " " << out.y << endl;
return 0;
}
Fui subiendo el codigo de a partes ( primero los include y luego fui agregando las funciones) y encontre que cuando agregaba el sort(), largaba ese error…
Segun este bug report
en github se debe a la version de GCC( en las anteriores a 4.9.0 ) de debe poner bool operator>(const tipo& valor)
probe esto y no sirvio… me largo el mismo error
Note tambien que el error de g++
from tanque2.cpp:5:
ocurre en la linea que se haya incluido <algorithm>
( si lo muevo a la linea 1, el error salta ahi…) pero si saco el sort() todo anda bien ( excepto que obtengo 0 puntos jaja )
tambien probe const bool operator>(const cw& in)
,const bool operator>(cw& in)
,const bool operator>(cw in)
,bool operator>(const cw& in)
,bool operator>(cw& in)
y bool operator>(cw in)
, todos me dieron el mismo error