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 }