题目链接: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. Java 数据库操作

    目录 Java数据库组织架构 下载驱动包 连接数据库 连接数据库的三个步骤 连接数据库的高开销 Statement接口介绍 PreparedStatement类 使用PreparedStatement ...

  2. 【学习总结】Git学习-参考廖雪峰老师教程二-安装Git

    学习总结之Git学习-总 目录: 一.Git简介 二.安装Git 三.创建版本库 四.时光机穿梭 五.远程仓库 六.分支管理 七.标签管理 八.使用GitHub 九.使用码云 十.自定义Git 期末总 ...

  3. spring boot中的约定优于配置

    Spring Boot并不是一个全新的框架,而是将已有的Spring组件整合起来. Spring Boot可以说是遵循约定优于配置这个理念产生的.它的特点是简单.快速和便捷. 既然遵循约定优于配置,则 ...

  4. 安装openssl

    此方法安装原因: 由于我用是非企业版 redhat 没有注册  有很多的yum 不能安装  openssl是在其中. 开始安装: 1.虚拟机挂载ios 镜像文件 2.进入终端 cd /media/RH ...

  5. 想在已创建的Vue工程里引入vux组件

    <1>. 在项目里安装vux npm install vux --save <2>. 安装vux-loader (这个vux文档似乎没介绍,当初没安装结果报了一堆错误) npm ...

  6. Python——Label控件说明

    Anchor :   标签中文本的位置: background(bg)foreground(fg) :背景色:前景色: borderwidth(bd) :边框宽度: width  .height   ...

  7. 一个好玩的小制作,以及在<a/>中的标签href="javascript:;"/href="javascript:void(0);"/href="javascript:"的用法

    一:一个小图标的制作 我们在支付宝.微信等某些地方上传文件时会遇到以下的图标,但是这样的图标其实可以用<a/>标签以及css样式完成, 具体代码如下: <!DOCTYPE html& ...

  8. How to reset macOS Icon Cache

    find . -name cuthead.txt find /private/var/folders/ -name 'com.apple.dock.iconcache' -delete find /p ...

  9. webpack始出来

    一直想好好整理一下webpack,现在就整理吧. 总结自己的实际搭建的整理情况,我还是要先对自己说一句,以后给文件夹起名字的时候不要用一些特殊的关键字,比如我在做这个demo的时候,我用的文件夹名称叫 ...

  10. 学习 Spring (三) Bean 的配置项 & 作用域

    Spring入门篇 学习笔记 配置项 Id: 整个 IoC 容器中的唯一标识 Class: 具体实例化的类(必须配置项) Scope: 作用域 Constructor arguments: 构造器参数 ...