思路:

模拟。

实现:

 #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 ;
}

最新文章

  1. (分享)Paxos在大型系统中常见的应用场景
  2. 重走java--Step 3
  3. Centos7开启防火墙并且使MYSQL外网访问开放3306端口
  4. 理解screenX clientX pageX概念
  5. 青瓷qici - H5小游戏 抽奖机 3 效果设置
  6. BestCoder Round #67 (div.2) N*M bulbs
  7. BZOJ 3106 棋盘游戏
  8. 直接引用windows命名空间
  9. Codeforces Round #274 (Div. 2) E. Riding in a Lift(DP)
  10. codeforces 598D Igor In the Museum
  11. 面向对象15.3String类-常见功能-获取-1
  12. html5图片上传时IOS和Android均显示摄像头拍照和图片选择
  13. css设置文字上下居中,一行文字居中,两行或多行文字同样居中。
  14. Photoshop调出清晰的阴雨天气山水风景照
  15. 关于apache配置映射端口
  16. ZYNQ学习之路1. Linux最小系统构建
  17. Maven学习第1期---Maven简单介绍
  18. 解决IE弹框提示“是否停止运行此脚本”问题
  19. python shlex 模块
  20. 常见sql for oracle

热门文章

  1. SPOJ MAXOR (分块 || 可持久化字典树 || 异或)(好题)
  2. Java并发实现线程阻塞原语LockSupport
  3. zabbix snmp、jmx配置使用
  4. 20个Flutter实例视频教程-第04节: 不规则底部工具栏制作-2
  5. 深入探究Java中equals()和==的区别是什么
  6. Lightoj1080 【线段树】
  7. Lightoj1037【状压DP】
  8. unity模型法线反转问题
  9. LVS 负载均衡器总结
  10. Eclipse mybatis中XML的自动提示