Codeforces 1079D Barcelonian Distance(计算几何)
题目链接: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(计算几何)的更多相关文章
- Codeforces I. Barcelonian Distance(暴力)
题目描述: In this problem we consider a very simplified model of Barcelona city. Barcelona can be repres ...
- 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坐标至少有一个整点的时 以及 给出的直线才有路径(也就是格子坐标图的线上) 问 两个整点所需要 ...
- Codeforces 161 D. Distance in Tree (树dp)
题目链接:http://codeforces.com/problemset/problem/161/D 题意: 给你一棵树,问你有多少对点的距离为k. 思路: dp[i][j]表示离i节点距离为j的点 ...
- Codeforces 528E Triangles 3000 - 计算几何
题目传送门 传送点I 传送点II 传送点III 题目大意 给定$n$的平面上的直线,保证没有三条直线共点,两条直线平行.问随机选出3条直线交成的三角形面积的期望. 显然$S=\frac{1}{2}ah ...
- Codeforces 608B. Hamming Distance Sum 模拟
B. Hamming Distance Sum time limit per test: 2 seconds memory limit per test:256 megabytes input: st ...
- codeforces 161 D. Distance in Tree(树形dp)
题目链接:http://codeforces.com/problemset/problem/161/D 题意:给出一个树,问树上点到点的距离为k的一共有几个. 一道简单的树形dp,算是一个基础题. 设 ...
- 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 ...
- Codeforces Gym 100733A Shitália 计算几何
ShitáliaTime Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hust.edu.cn/vjudge/contest/view.acti ...
- Codeforces Gym 100286A. Aerodynamics 计算几何 求二维凸包面积
Problem A. AerodynamicsTime Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hust.edu.cn/vjudge/co ...
随机推荐
- PAT L2-023 图着色问题
https://pintia.cn/problem-sets/994805046380707840/problems/994805057298481152 图着色问题是一个著名的NP完全问题.给定无向 ...
- Android下的软件合集
在平常使用Android手机的时候,选择一个好的软件可以做到事半功倍的效果,所以在此总结一下,加速我们的工作与生活效率 1) ConnectBot ConnectBot是一个Android操作系统上的 ...
- C#设计模式之3:观察者模式
C#中已经实现了观察者模式,那就是事件,事件封装了委托,使得委托的封装性更好,在类的内部定义事件,然后在客户端对事件进行注册: public class Subject { public event ...
- [转帖]HTTP 头部解释
HTTP 头部解释 https://www.cnblogs.com/poissonnotes/p/4844014.html 之前看的太粗了 同事闻起来 referer 才知道自己所知甚少.. ==== ...
- [转帖] 百度知道: KMS 和OSPP
https://zhidao.baidu.com/question/1819332749671662308.html Key Management Service (KMS).目前Windows Se ...
- 局域网 FTP建立,搭建一个简易的局域网服务器
1.创建用户名以及密码: 右键我的电脑 -> 管理->本地用户和组->右键用户->新用户----设置用户名密码: 2.安装IIS 和FTP :控制面板->程序->打 ...
- Laravel 5.2+ 使用url()全局函数返回前一个页面的地址
注意:文章标题中5.2+表示该文章内容可向上兼容,适用于Laravel版本5.2及更高(目前最新为5.6),但不可向下兼容,即不适用于5.2版本以下.推荐大家花一点点时间,将自己的Laravel更新至 ...
- jenkins结合svn检测版本变化执行shell脚本实现项目部署
工具: centos 7 jenkins-2.138.2-1.1.noarch.rpm,2018年10月10号最新版(简单rpm包安装见https://www.cnblogs.com/dannylin ...
- java & jdk
java & jdk JDK 下载太慢 & java 12 https://download.oracle.com/otn-pub/java/jdk/12.0.1+12/69cfe15 ...
- 数据库迁移(创建关联等操作) Target database is not up to date报错
使用Mysql-sqlalchemy执行数据库迁移 来更新数据库: 队长试探性的在网上找了几种方案 依然没有解决报错问题: 后来看了https://www.aliyun.com/jiaocheng/4 ...