UVa10674

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\n", v[i].first.x, v[i].first.y, v[i].second.x, v[i].second.y, Length(v[i].first-v[i].second) );

 

posted on 2013-06-17 15:20  Ac_coral  阅读(140)  评论(0编辑  收藏  举报

导航