A - Amsterdam Distance

题意:极坐标系,给出两个点,求最短距离

思路:只有两种方式,取min  第一种,先走到0点,再走到终点 第二种,走到同一半径,再走过去

 1 #include <bits/stdc++.h>
 2 
 3 using namespace std;
 4 #define INF 0x3f3f3f3f
 5 
 6 const double PI = acos(-1.0);
 7 
 8 double n, m, r;
 9 double n1, m1, n2, m2;
10 
11 inline double work1()
12 {
13     double dis1 = r * n1 / n;
14     double dis2 = r * n2 / n;
15     return dis1 + dis2;
16 }
17 
18 inline double work2()
19 {
20     double dis1 = r * (n2 - n1) / n;
21     double dis2 = fabs(m1 - m2) * r * n1 * PI/ (n * m);
22     return dis1 + dis2;    
23 }
24 
25 int main()
26 {
27     while (scanf("%lf%lf%lf", &m, &n, &r) != EOF)
28     {
29         scanf("%lf%lf%lf%lf", &m1, &n1, &m2, &n2);
30         if (n1 > n2) 
31         {
32             swap(n1, n2);
33             swap(m1, m2);
34         }
35         double ans = INF * 1.0;
36         ans = min(ans, work1());
37         ans = min(ans, work2());
38         printf("%.10f\n", ans);
39     }
40     return 0;
41 }
View Code

相关文章: