zoukankan      html  css  js  c++  java
  • Codeforces Round #522 (Div. 2, based on Technocup 2019 Elimination Round 3) D. Barcelonian Distance 几何代数(简单)

    题意:给出一条直线 ax +by+c=0  给出两个整点 (x1,y1) (x2,y2) 只有在x,y坐标至少有一个整点的时 以及   给出的直线才有路径(也就是格子坐标图的线上)  

    问 两个整点所需要经过的最短距离

    思路: 整点和整点之间的最短路径 要么 经过 直线 要么不经过直线 如果不经过直线,那么最短距离就是两者的曼哈顿距离  |x1-x2|+|y1-y2|

    如果经过线段  那么一个点有两种到线段的方式  一种是和线段上的点x 相同 一个是和线段上的点y相同  2*2一共四种情况  全部算一遍取最小即可

    还要考虑斜率等于0以及直线垂直x轴的情况  

     1 #include<bits/stdc++.h>
     2 #define F first
     3 #define S second
     4 #define pii pair<int,int>
     5 #define pb push_back
     6 #define mkp make_pair
     7 #define all(zzz) (zzz).being(),(zzz).end()
     8 typedef long long ll;
     9 using namespace std;
    10 const int maxn=1e5+5;
    11 double dist(double x1,double y1,double x2,double y2){
    12     return sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
    13 }
    14 int main(){
    15     ll a,b,c;
    16     scanf("%lld%lld%lld",&a,&b,&c);
    17     ll x1,y1,x2,y2;
    18     scanf("%lld%lld%lld%lld",&x1,&y1,&x2,&y2);
    19     double ans=abs(x2-x1)+abs(y2-y1);
    20     if(a!=0&&b!=0){
    21     double x3=x1;
    22     double y3=1.0*(-c-a*x1)/b;
    23     double y4=y1;
    24     double x4=1.0*(-c-b*y1)/a;
    25     double x5=x2;
    26     double y5=1.0*(-c-a*x2)/b;
    27     double y6=y2;
    28     double x6=1.0*(-c-b*y2)/a;
    29     ans=min(dist(x3,y3,x5,y5)+abs(y3-y1)+abs(y5-y2),ans);
    30     ans=min(dist(x4,y4,x5,y5)+abs(x4-x1)+abs(y5-y2),ans);
    31     ans=min(dist(x3,y3,x6,y6)+abs(y3-y1)+abs(x6-x2),ans);
    32     ans=min(dist(x4,y4,x6,y6)+abs(x4-x1)+abs(x6-x2),ans);
    33     }
    34     else if(a==0&&b!=0){
    35         ans=min(ans,dist(x1,-c/b,x2,-c/b)+abs(-c/b-y1)+abs(-c/b-y2));
    36     }
    37     else if(a!=0&&b==0){
    38         ans=min(ans,dist(-c/a,y1,-c/a,y2)+abs(-c/a-x1)+abs(-c/a-x2));
    39     }
    40     printf("%.10lf
    ",ans);
    41     return 0;
    42 }
    View Code
  • 相关阅读:
    判断设备类型是iPhone还是iPad
    robotium使用中的问题
    onTouchEvent()
    [ObjectC]@class的含义
    关于左外连接和内连接的区别
    web services = XML + HTTP
    c#中的变量
    C#捕捉异常
    ASP.NET中Visio图形的控制与数据的动态显示
    用存储过程在数据库中批量插入数据1w条
  • 原文地址:https://www.cnblogs.com/ttttttttrx/p/10790884.html
Copyright © 2011-2022 走看看