码迷,mamicode.com
首页 > 其他好文 > 详细

Codeforces 1078 - A/B/C/D/E - (Undone)

时间:2018-11-22 02:30:20      阅读:178      评论:0      收藏:0      [点我收藏+]

标签:代码   ++   pre   targe   type   rabl   return   done   fabs   

链接:https://codeforces.com/contest/1078


A - Barcelonian Distance - [分类讨论]

题意:

给出一个在二维平面直角坐标系第一象限内的,单位长度为 $1$ 的无限大网格,每条直线都代表道路。又给你一条直线 $ax+by+c=0$,也代表一条道路。

现在给你两个格点坐标 $(x_1,y_1)$ 和 $(x_2,y_2)$,让你求该两点间最短的道路距离。

题解:

一个矩形,它的四条边无限延长,跟另外一条直线,会产生两个(直线水平或竖直)或者四个交点(直线倾斜),计算出这个些点,然后算出所有可能的走法的长度即可。

AC代码:

#include<bits/stdc++.h>
using namespace std;
typedef pair<double,double> pff;
const double eps=1e-10;
double a,b,c;
pff p1,p2;
pff q1,q2,q3,q4;
double ans,ans1,ans2,ans3,ans4;
inline double dist(const pff& a,const pff& b) {
    return sqrt(pow(a.first-b.first,2)+pow(a.second-b.second,2));
}
inline double min(double a,double b,double c,double d,double e)
{
    double res=a;
    res=min(res,b);
    res=min(res,c);
    res=min(res,d);
    res=min(res,e);
    return res;
}
int main()
{
    ans=ans1=ans2=ans3=ans4=1e12;
    cin>>a>>b>>c>>p1.first>>p1.second>>p2.first>>p2.second;
    ans=fabs(p1.first-p2.first)+fabs(p1.second-p2.second);
    if(fabs(a)<eps)
    {
        q1=make_pair(p1.first,-c/b);
        q2=make_pair(p2.first,-c/b);
        ans1=dist(p1,q1)+dist(q1,q2)+dist(q2,p2);
    }
    else if(fabs(b)<eps)
    {
        q1=make_pair(-c/a,p1.second);
        q2=make_pair(-c/a,p2.second);
        ans2=fabs(p1.first-q1.first)+dist(q1,q2)+fabs(p2.first-q2.first);
    }
    else
    {
        q1=make_pair(p1.first,-(a*p1.first+c)/b);
        q3=make_pair(-(b*p1.second+c)/a,p1.second);
        q2=make_pair(p2.first,-(a*p2.first+c)/b);
        q4=make_pair(-(b*p2.second+c)/a,p2.second);
        ans1=dist(p1,q1)+dist(q1,q2)+dist(q2,p2);
        ans2=dist(p1,q1)+dist(q1,q4)+dist(q4,p2);
        ans3=dist(p1,q3)+dist(q3,q2)+dist(q2,p2);
        ans4=dist(p1,q3)+dist(q3,q4)+dist(q4,p2);
    }
    printf("%.10f\n",min(ans,ans1,ans2,ans3,ans4));
}

 


B - The Unbearable Lightness of Weights - []

题意:

 

Codeforces 1078 - A/B/C/D/E - (Undone)

标签:代码   ++   pre   targe   type   rabl   return   done   fabs   

原文地址:https://www.cnblogs.com/dilthey/p/9998768.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!