Result | TIME Limit | MEMORY Limit | Run Times | AC Times | JUDGE |
---|---|---|---|---|---|
1s | 8192K | 558 | 338 | Standard |
To calculate the circumference of a circle seems to be an easy task - provided you know its diameter. But what if you don't?
You are given the cartesian coordinates of three non-collinear points in the plane.
Your job is to calculate the circumference of the unique circle that intersects all three points.
0.0 -0.5 0.5 0.0 0.0 0.5 0.0 0.0 0.0 1.0 1.0 1.0 5.0 5.0 5.0 7.0 4.0 6.0 0.0 0.0 -1.0 7.0 7.0 7.0 50.0 50.0 50.0 70.0 40.0 60.0 0.0 0.0 10.0 0.0 20.0 1.0 0.0 -500000.0 500000.0 0.0 0.0 500000.0
3.14 4.44 6.28 31.42 62.83 632.24 3141592.65
This problem is used for contest: 70 167 197
这个题很值得吐槽...记得《那些年》里说以后会连log都不知道是什么...
其实,这题给出三个点坐标算外接圆半径什么的我果真一下子没想起来.....高中的知识.....
其实就是一个小公式,r = (a*b*c) / (4*s)。可以用正弦定理推导。面积用到行列式,这个还是记得的。
1 #include <stdio.h> 2 #include <math.h> 3 4 #define PI 3.141592653589793 5 6 double distance(double x1, double y1, double x2, double y2) 7 { 8 return sqrt((x1-x2)*(x1-x2) + (y1-y2)*(y1-y2)); 9 } 10 double mianji(double x1, double y1, double x2, double y2, double x3, double y3) 11 { 12 return 0.5*(x1*y2+x2*y3+x3*y1-x3*y2-x2*y1-x1*y3); 13 } 14 15 int main() 16 { 17 //freopen("in.txt", "r", stdin); 18 19 double x1, y1, x2, y2, x3, y3; 20 double a, b, c; 21 double r; 22 double s; 23 double C; 24 25 while (scanf("%lf%lf%lf%lf%lf%lf", &x1, &y1, &x2, &y2, &x3, &y3) != EOF) 26 { 27 a = distance(x1, y1, x2, y2); 28 b = distance(x2, y2, x3, y3); 29 c = distance(x3, y3, x1, y1); 30 31 s = mianji(x1, y1, x2, y2, x3, y3); 32 r = (a*b*c) / (4*s); 33 34 C = 2 * PI * r; 35 printf("%.2lf\n", fabs(C)); 36 } 37 38 return 0; 39 }