• CF1079D Barcelonian Distance


    思路:

    模拟。

    实现:

     1 #include <bits/stdc++.h>
     2 using namespace std;
     3 const long long INF = 10000000000;
     4 double dis(double x1, double y1, double x2, double y2)
     5 {
     6     return sqrt((x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2));
     7 }
     8 int main()
     9 {
    10     int a, b, c;
    11     double x1, x2, y1, y2;
    12     while (cin >> a >> b >> c)
    13     {
    14         cin >> x1 >> y1 >> x2 >> y2;
    15         if (a == 0 || b == 0)
    16         {
    17             printf("%.10f
    ", fabs(x1 - x2) + fabs(y1 - y2));
    18             continue;
    19         }
    20         double n1 = x1, m1 = y2; // y1--y2
    21         double ty = (-a * x1 - c) / b;
    22         double tx = (-b * y2 - c) / a;
    23         double ans = fabs(x1 - x2) + fabs(y1 - y2);
    24         if (ty >= min(y1, y2) && ty <= max(y1, y2) && tx >= min(x1, x2) && tx <= max(x1, x2))
    25         {
    26             double tmp = fabs(y1 - ty) + fabs(x2 - tx) + dis(x1, ty, tx, y2);
    27             ans = min(ans, tmp);
    28         }
    29         double ty2 = (-a * x2 - c) / b;
    30         if (ty >= min(y1, y2) && ty <= max(y1, y2) && ty2 >= min(y1, y2) && ty2 <= max(y1, y2))
    31         {
    32             double tmp = fabs(y1 - ty) + fabs(ty2 - y2) + dis(x1, ty, x2, ty2);
    33             ans = min(ans, tmp);
    34         }
    35         double n2 = x2, m2 = y1; // x1--x2
    36         tx = (-b * y1 - c) / a;
    37         ty = (-a * x2 - c) / b;
    38         if (ty >= min(y1, y2) && ty <= max(y1, y2) && tx >= min(x1, x2) && tx <= max(x1, x2))
    39         {
    40             double tmp = fabs(x1 - tx) + fabs(y2 - ty) + dis(tx, y1, x2, ty);
    41             ans = min(ans, tmp);
    42         }
    43         double tx2 = (-b * y2 - c) / a;
    44         if (tx >= min(x1, x2) && tx <= max(x1, x2) && tx2 >= min(x1, x2) && tx2 <= max(x1, x2))
    45         {
    46             double tmp = fabs(x1 - tx) + fabs(tx2 - x2) + dis(tx, y1, tx2, y2);
    47             ans = min(ans, tmp);
    48         }
    49         printf("%.10f
    ", ans);
    50     }
    51     return 0;
    52 }
  • 相关阅读:
    记录优雅的pythonic代码
    记录python学习过程中的一些小心得
    关于理解python类的小题
    CSS3之属性选择器
    CSS3之初始
    HTML5+CSS3之离线web应用
    HTML5+CSS3之响应式视频以及iFrame下插入响应式视频的解决方案
    HTML5+CSS3之播放视频以及在IE8及以下的解决方案
    HTML5+CSS3响应式设计(二)
    HTML5+CSS3响应式设计(一)
  • 原文地址:https://www.cnblogs.com/wangyiming/p/10054315.html
Copyright © 2020-2023  润新知