题目链接:Barcelonian Distance

题意:给定方格坐标,方格坐标上有两个点A,B和一条直线。规定:直线上沿直线走,否则沿方格走。求A到B的最短距离。

题解:通过直线到达的:A、B两点都有两种方式到直线上,最多4种情况,每种情况求出A、B点到直线的距离和直线上新的两点间距离,取4种情况中最优的。

不通过直线到达:$abs(x1-x2)+abs(y1-y2)$,最后与通过直线到达的最优情况比较,得到最优解。

 #include <cmath>
#include <cstdio>
#include <algorithm>
using namespace std; double a,b,c,ans;
double x1,y1,x2,y2; double calx(double y){
return (-c-b*y)/a;
} double caly(double x){
return (-c-a*x)/b;
} double cal1(double x1,double x2){
double X1,X2,Y1,Y2;
double res=;
X1=x1;Y1=caly(x1);
res+=abs(Y1-y1);
X2=x2;Y2=caly(x2);
res+=abs(Y2-y2);
res+=sqrt((X1-X2)*(X1-X2)+(Y1-Y2)*(Y1-Y2));
return res;
} double cal2(double x1,double y2){
double X1,X2,Y1,Y2;
double res=;
X1=x1;Y1=caly(x1);
res+=abs(Y1-y1);
X2=calx(y2);Y2=y2;
res+=abs(X2-x2);
res+=sqrt((X1-X2)*(X1-X2)+(Y1-Y2)*(Y1-Y2));
return res;
} double cal3(double y1,double x2){
double X1,X2,Y1,Y2;
double res=;
X1=calx(y1);Y1=y1;
res+=abs(X1-x1);
X2=x2;Y2=caly(x2);
res+=abs(Y2-y2);
res+=sqrt((X1-X2)*(X1-X2)+(Y1-Y2)*(Y1-Y2));
return res;
} double cal4(double y1,double y2){
double X1,X2,Y1,Y2;
double res=;
X1=calx(y1);Y1=y1;
res+=abs(X1-x1);
X2=calx(y2);Y2=y2;
res+=abs(X2-x2);
res+=sqrt((X1-X2)*(X1-X2)+(Y1-Y2)*(Y1-Y2));
return res;
} int main(){
scanf("%lf%lf%lf",&a,&b,&c);
scanf("%lf%lf%lf%lf",&x1,&y1,&x2,&y2);
double ans=abs(x1-x2)+abs(y1-y2);
if(a==||b==){
printf("%.10f\n",abs(x1-x2)+abs(y1-y2));
return ;
}
ans=min(ans,cal1(x1,x2));
ans=min(ans,cal2(x1,y2));
ans=min(ans,cal3(y1,x2));
ans=min(ans,cal4(y1,y2));
printf("%.10f\n",ans);
return ;
}

Codeforces 1079D Barcelonian Distance(计算几何)的更多相关文章

  1. Codeforces I. Barcelonian Distance(暴力)

    题目描述: In this problem we consider a very simplified model of Barcelona city. Barcelona can be repres ...

  2. 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坐标至少有一个整点的时 以及   给出的直线才有路径(也就是格子坐标图的线上) 问 两个整点所需要 ...

  3. Codeforces 161 D. Distance in Tree (树dp)

    题目链接:http://codeforces.com/problemset/problem/161/D 题意: 给你一棵树,问你有多少对点的距离为k. 思路: dp[i][j]表示离i节点距离为j的点 ...

  4. Codeforces 528E Triangles 3000 - 计算几何

    题目传送门 传送点I 传送点II 传送点III 题目大意 给定$n$的平面上的直线,保证没有三条直线共点,两条直线平行.问随机选出3条直线交成的三角形面积的期望. 显然$S=\frac{1}{2}ah ...

  5. Codeforces 608B. Hamming Distance Sum 模拟

    B. Hamming Distance Sum time limit per test: 2 seconds memory limit per test:256 megabytes input: st ...

  6. codeforces 161 D. Distance in Tree(树形dp)

    题目链接:http://codeforces.com/problemset/problem/161/D 题意:给出一个树,问树上点到点的距离为k的一共有几个. 一道简单的树形dp,算是一个基础题. 设 ...

  7. Codeforces 161.D. Distance in Tree-树分治(点分治,不容斥版)-树上距离为K的点对数量-蜜汁TLE (VK Cup 2012 Round 1)

    D. Distance in Tree time limit per test 3 seconds memory limit per test 512 megabytes input standard ...

  8. Codeforces Gym 100733A Shitália 计算几何

    ShitáliaTime Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hust.edu.cn/vjudge/contest/view.acti ...

  9. Codeforces Gym 100286A. Aerodynamics 计算几何 求二维凸包面积

    Problem A. AerodynamicsTime Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hust.edu.cn/vjudge/co ...

随机推荐

  1. PAT L2-023 图着色问题

    https://pintia.cn/problem-sets/994805046380707840/problems/994805057298481152 图着色问题是一个著名的NP完全问题.给定无向 ...

  2. Android下的软件合集

    在平常使用Android手机的时候,选择一个好的软件可以做到事半功倍的效果,所以在此总结一下,加速我们的工作与生活效率 1) ConnectBot ConnectBot是一个Android操作系统上的 ...

  3. C#设计模式之3:观察者模式

    C#中已经实现了观察者模式,那就是事件,事件封装了委托,使得委托的封装性更好,在类的内部定义事件,然后在客户端对事件进行注册: public class Subject { public event ...

  4. [转帖]HTTP 头部解释

    HTTP 头部解释 https://www.cnblogs.com/poissonnotes/p/4844014.html 之前看的太粗了 同事闻起来 referer 才知道自己所知甚少.. ==== ...

  5. [转帖] 百度知道: KMS 和OSPP

    https://zhidao.baidu.com/question/1819332749671662308.html Key Management Service (KMS).目前Windows Se ...

  6. 局域网 FTP建立,搭建一个简易的局域网服务器

    1.创建用户名以及密码: 右键我的电脑 -> 管理->本地用户和组->右键用户->新用户----设置用户名密码: 2.安装IIS 和FTP :控制面板->程序->打 ...

  7. Laravel 5.2+ 使用url()全局函数返回前一个页面的地址

    注意:文章标题中5.2+表示该文章内容可向上兼容,适用于Laravel版本5.2及更高(目前最新为5.6),但不可向下兼容,即不适用于5.2版本以下.推荐大家花一点点时间,将自己的Laravel更新至 ...

  8. jenkins结合svn检测版本变化执行shell脚本实现项目部署

    工具: centos 7 jenkins-2.138.2-1.1.noarch.rpm,2018年10月10号最新版(简单rpm包安装见https://www.cnblogs.com/dannylin ...

  9. java & jdk

    java & jdk JDK 下载太慢 & java 12 https://download.oracle.com/otn-pub/java/jdk/12.0.1+12/69cfe15 ...

  10. 数据库迁移(创建关联等操作) Target database is not up to date报错

    使用Mysql-sqlalchemy执行数据库迁移 来更新数据库: 队长试探性的在网上找了几种方案 依然没有解决报错问题: 后来看了https://www.aliyun.com/jiaocheng/4 ...