题目链接: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. Linux系统mysql使用(一)

    一.安装 sudo apt-get update #更新软件源 sudo apt-get install mysql-server #安装mysql 二.启动和关闭 service mysql sta ...

  2. this is incompatible with sql_mode=only_full_group_by

    mysql命令gruop by报错this is incompatible with sql_mode=only_full_group_by - Jim_.NET - 博客园 http://www.c ...

  3. C#复习笔记(1)--C#开发的进化史

    前言:陆续使用C#已经有一年半的时间.中间做过一些应用,现在为了有更高的提升,决定重新看一遍C# in depth,并总结一些笔记. 一.从简单的数据类型开始 上面是C#1到C#4中的一部分演变历程. ...

  4. oss上传和下载的笔记

    <<<<<<<<<对oss操作,上传文件>>>>>>>>>>>>>& ...

  5. linux redis服务安装

    redis下载 官网地址:https://redis.io/download 在Linux下安装Redis非常简单,具体步骤如下(官网有说明): 1.下载源码,解压缩后编译源码. $ wget htt ...

  6. scrapy的一些容易忽视的点(模拟登陆,传递item等)

    scrapy爬虫注意事项 一.item数据只有最后一条 这种情况一般存在于对标签进行遍历时,将item对象放置在了for循环的外部.解决方式:将item放置在for循环里面.   二.item字段传递 ...

  7. windows 10 screenshot keyboard shortcut

    windows 10 screenshot keyboard shortcut Win + Shfit + S https://www.cnet.com/how-to/8-ways-to-take-s ...

  8. 一、Composer

    一.Composer -依赖管理工具 Composer 会帮你安装这些依赖的库文件

  9. How to recovery compiz

    sudo apt install compizconfig-settings-manager dconf reset -f /org/compiz/ setsid unity dconf list / ...

  10. 【python练习题】程序16

    #题目:输出指定格式的日期. import time print (time.strftime('%Y:%m:%d %X',time.localtime(time.time())))