wa好几次。
讨论版所有数据都没问题- -
最后发现是用于排序而重载的<运算符函数精度不够,导致误差
bool operator < (const Point& a, const Point& b) { //return a.x < b.x || (a.x == b.x && a.y < b.y); return dcmp(a.x-b.x) < 0 || (dcmp(a.x-b.x) == 0 && dcmp(a.y-b.y) < 0); }
对于题目中要求的排序规则,我是用:
vector < pair<Point, Point> > v; for ( i = 0; i < cnt; ++i ) v.push_back ( make_pair(a[i], b[i]) ); sort ( v.begin(), v.end() );
对于求两点间距离,可以用 求向量长度的函数 去求:
double Length(const Vector& A) { return sqrt(Dot(A, A)); }
调用如下:
for ( i = 0; i < cnt; ++i ) printf ( "%.5lf %.5lf %.5lf %.5lf %.5lf ", v[i].first.x, v[i].first.y, v[i].second.x, v[i].second.y, Length(v[i].first-v[i].second) );