CF1079D Barcelonian Distance
2024-10-21 03:50:51
思路:
模拟。
实现:
#include <bits/stdc++.h>
using namespace std;
const long long INF = ;
double dis(double x1, double y1, double x2, double y2)
{
return sqrt((x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2));
}
int main()
{
int a, b, c;
double x1, x2, y1, y2;
while (cin >> a >> b >> c)
{
cin >> x1 >> y1 >> x2 >> y2;
if (a == || b == )
{
printf("%.10f\n", fabs(x1 - x2) + fabs(y1 - y2));
continue;
}
double n1 = x1, m1 = y2; // y1--y2
double ty = (-a * x1 - c) / b;
double tx = (-b * y2 - c) / a;
double ans = fabs(x1 - x2) + fabs(y1 - y2);
if (ty >= min(y1, y2) && ty <= max(y1, y2) && tx >= min(x1, x2) && tx <= max(x1, x2))
{
double tmp = fabs(y1 - ty) + fabs(x2 - tx) + dis(x1, ty, tx, y2);
ans = min(ans, tmp);
}
double ty2 = (-a * x2 - c) / b;
if (ty >= min(y1, y2) && ty <= max(y1, y2) && ty2 >= min(y1, y2) && ty2 <= max(y1, y2))
{
double tmp = fabs(y1 - ty) + fabs(ty2 - y2) + dis(x1, ty, x2, ty2);
ans = min(ans, tmp);
}
double n2 = x2, m2 = y1; // x1--x2
tx = (-b * y1 - c) / a;
ty = (-a * x2 - c) / b;
if (ty >= min(y1, y2) && ty <= max(y1, y2) && tx >= min(x1, x2) && tx <= max(x1, x2))
{
double tmp = fabs(x1 - tx) + fabs(y2 - ty) + dis(tx, y1, x2, ty);
ans = min(ans, tmp);
}
double tx2 = (-b * y2 - c) / a;
if (tx >= min(x1, x2) && tx <= max(x1, x2) && tx2 >= min(x1, x2) && tx2 <= max(x1, x2))
{
double tmp = fabs(x1 - tx) + fabs(tx2 - x2) + dis(tx, y1, tx2, y2);
ans = min(ans, tmp);
}
printf("%.10f\n", ans);
}
return ;
}
最新文章
- (分享)Paxos在大型系统中常见的应用场景
- 重走java--Step 3
- Centos7开启防火墙并且使MYSQL外网访问开放3306端口
- 理解screenX clientX pageX概念
- 青瓷qici - H5小游戏 抽奖机 3 效果设置
- BestCoder Round #67 (div.2) N*M bulbs
- BZOJ 3106 棋盘游戏
- 直接引用windows命名空间
- Codeforces Round #274 (Div. 2) E. Riding in a Lift(DP)
- codeforces 598D Igor In the Museum
- 面向对象15.3String类-常见功能-获取-1
- html5图片上传时IOS和Android均显示摄像头拍照和图片选择
- css设置文字上下居中,一行文字居中,两行或多行文字同样居中。
- Photoshop调出清晰的阴雨天气山水风景照
- 关于apache配置映射端口
- ZYNQ学习之路1. Linux最小系统构建
- Maven学习第1期---Maven简单介绍
- 解决IE弹框提示“是否停止运行此脚本”问题
- python shlex 模块
- 常见sql for oracle