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

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

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

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

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

 #include<bits/stdc++.h>
#define F first
#define S second
#define pii pair<int,int>
#define pb push_back
#define mkp make_pair
#define all(zzz) (zzz).being(),(zzz).end()
typedef long long ll;
using namespace std;
const int maxn=1e5+;
double dist(double x1,double y1,double x2,double y2){
return sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
}
int main(){
ll a,b,c;
scanf("%lld%lld%lld",&a,&b,&c);
ll x1,y1,x2,y2;
scanf("%lld%lld%lld%lld",&x1,&y1,&x2,&y2);
double ans=abs(x2-x1)+abs(y2-y1);
if(a!=&&b!=){
double x3=x1;
double y3=1.0*(-c-a*x1)/b;
double y4=y1;
double x4=1.0*(-c-b*y1)/a;
double x5=x2;
double y5=1.0*(-c-a*x2)/b;
double y6=y2;
double x6=1.0*(-c-b*y2)/a;
ans=min(dist(x3,y3,x5,y5)+abs(y3-y1)+abs(y5-y2),ans);
ans=min(dist(x4,y4,x5,y5)+abs(x4-x1)+abs(y5-y2),ans);
ans=min(dist(x3,y3,x6,y6)+abs(y3-y1)+abs(x6-x2),ans);
ans=min(dist(x4,y4,x6,y6)+abs(x4-x1)+abs(x6-x2),ans);
}
else if(a==&&b!=){
ans=min(ans,dist(x1,-c/b,x2,-c/b)+abs(-c/b-y1)+abs(-c/b-y2));
}
else if(a!=&&b==){
ans=min(ans,dist(-c/a,y1,-c/a,y2)+abs(-c/a-x1)+abs(-c/a-x2));
}
printf("%.10lf\n",ans);
return ;
}

Codeforces Round #522 (Div. 2, based on Technocup 2019 Elimination Round 3) D. Barcelonian Distance 几何代数(简单)的更多相关文章

  1. Codeforces Round #522 (Div. 2, based on Technocup 2019 Elimination Round 3)B. Personalized Cup

    题意:把一长串字符串 排成矩形形式  使得行最小  同时每行不能相差大于等于两个字符 每行也不能大于20个字符 思路: 因为使得行最小 直接行从小到大枚举即可   每行不能相差大于等于两个字符相当于  ...

  2. Codeforces Round #522 (Div. 2, based on Technocup 2019 Elimination Round 3) C. Playing Piano

    题意:给出一个数列 a1 a2......an  让你构造一个序列(该序列取值(1-5)) 如果a(i+1)>a(i) b(i+1)>b(i) 如果a(i+1)<a(i)  那么b( ...

  3. Codeforces Round #522 (Div. 2, based on Technocup 2019 Elimination Round 3) Solution

    A. Kitchen Utensils Water. #include <bits/stdc++.h> using namespace std; #define N 110 int n, ...

  4. Codeforces Round #517 (Div. 2, based on Technocup 2019 Elimination Round 2)

    Codeforces Round #517 (Div. 2, based on Technocup 2019 Elimination Round 2) #include <bits/stdc++ ...

  5. (AB)Codeforces Round #528 (Div. 2, based on Technocup 2019 Elimination Round

    A. Right-Left Cipher time limit per test 1 second memory limit per test 256 megabytes input standard ...

  6. Codeforces Round #517 (Div. 2, based on Technocup 2019 Elimination Round 2) D. Minimum path

    http://codeforces.com/contest/1072/problem/D bfs 走1步的最佳状态 -> 走2步的最佳状态 -> …… #include <bits/ ...

  7. Codeforces Round #517 (Div. 2, based on Technocup 2019 Elimination Round 2) D. Minimum path(字典序)

    https://codeforces.com/contest/1072/problem/D 题意 给你一个n*n充满小写字母的矩阵,你可以更改任意k个格子的字符,然后输出字典序最小的从[1,1]到[n ...

  8. Codeforces Round #528 (Div. 2, based on Technocup 2019 Elimination Round 4) C. Connect Three 【模拟】

    传送门:http://codeforces.com/contest/1087/problem/C C. Connect Three time limit per test 1 second memor ...

  9. Codeforces Round #512 (Div. 2, based on Technocup 2019 Elimination Round 1) C. Vasya and Golden Ticket 【。。。】

    任意门:http://codeforces.com/contest/1058/problem/C C. Vasya and Golden Ticket time limit per test 1 se ...

随机推荐

  1. 【带着canvas去流浪(4)】绘制散点图

    目录 一. 任务说明 二. 重点提示 三. 示例代码 四.散点hover交互效果的实现 4.1 基本算法 4.2 参考代码 4.3 Demo中的小问题 示例代码托管在:http://www.githu ...

  2. Dapper的基本 理论 知识

    简述 Dapper是一个轻量级的ORM工具:ORM框架的核心思想是对象关系映射,ORM是将表与表之间的操作,映射成对象和对象之间的操作,就是通过操作实体类来达到操作表的目的.从数据库提取的数据会自动按 ...

  3. 现代Java进阶之路必备技能——2019 版

    Java技术的学习阶段有三 第1个是java基础,比如对集合类,并发,IO,JVM,内存模型,泛型,异常,反射,等有深入了解. 第2个是全面的互联网技术相关知识,比如redis,mogodb,ngin ...

  4. python从任意文件读取邮件地址输出的代码

    如下的资料是关于python从任意文件读取邮件地址输出的代码. # This script takes whatever you throw at stdin and outputs email ad ...

  5. 一些android开发实用性网站记录

    android开发一些有用的网站有很多,可以方便我们开发,记录一下哈. 1.Android源代码在线阅读:https://www.androidos.net.cn/sourcecode 2.在线Jso ...

  6. Scala之eq,equals,==的区别

    一.简介 根据官方API的定义: final def ==(arg0: Any): Boolean The expression x == that is equivalent to if (x eq ...

  7. 『Shell编程』学习记录(2)

    例1.文件io #include <stdio.h> #include <sys/types.h> #include <sys/stat.h> #include & ...

  8. Maven settings.xml

    <?xml version="1.0" encoding="UTF-8"?> <settings xmlns="http://mav ...

  9. RabbitMQ框架构建系列(二)——RabbitMQ基础知识介绍

    上一篇记录了一下AMQP协议,RabbitMQ是一个Erlang开发的AMQP协议的开源实现.这一篇简单的介绍一下RabbitMQ的基本原理. 一.RabbitMQ的特点 1.可靠性:RabbitMQ ...

  10. Fiddler-抓取手机app请求

    如何使用 Fiddler 抓取手机app请求? 前提:手机和电脑在同一局域网 1.设置 Fiddler>Tools>Options>Connections 勾选 Allow remo ...