Timus 1640

#include <iostream>
using namespace std;

#define MAXN 100

typedef
struct point_st {
double x,y;
}
*point_t;

point_st points[MAXN]
= { 0 };

int main() {
int N,i,j;
double d,max_d_sqt = -1,x,y;
point_st pointA, pointB;
cin
>>N;
for(i=0;i<N;i++)
cin
>>points[i].x>>points[i].y;

for(i=0;i<N;i++) {
d
= points[i].x * points[i].x + points[i].y * points[i].y;
if(max_d_sqt < d) {
max_d_sqt
= d;
pointA
= points[i];
}
}

printf(
"0 0 %.12lf\n", pow(max_d_sqt,0.5));

return 0;
}

题目就是要求一点,以该点为圆心作一个半径R的圆,至少有一个已给出的点在该圆上,而其他点则在该圆内。

很坑爹的一题,首先是主角要传送的地点竟然可以是原来的点,即不动

而且,题目给出点坐标的绝对值不大于1000,但冰墙的半径却可以是不大于10000,那就简单了。

如果条件苛刻点,可以考虑求出所有点构成的线段的中点,然后对所有中点求出到每一点的距离,选择最大的距离作为半径,该中点作为圆心。

posted @ 2011-07-31 20:45  DOF_KL  阅读(118)  评论(0编辑  收藏  举报