链接:https://www.nowcoder.com/acm/contest/128/D
来源:牛客网

题目描述

"夏天的风 正暖暖吹过 穿过头发穿过耳朵..."耳机里在哼着这首温岚的《夏天的风》,我以为我能这样听着歌,喝着可乐,在寝室里开着空调打游戏,安静地度过这个35℃的下午....
"叮..!"手机屏幕突然弹出一则提醒,"您下午6、7节的排球课别忘了哦~"
唔...果然美好的梦总是会被现实打碎,只好穿上运动鞋,顶着炙热的阳光,向体育馆走去。
体育老师是一个微胖的中年大叔,他总喜欢在上课之前让我们玩游戏,大概是达到热身效果吧。
这次,他又定下了奇怪的游戏规则,于是我把它出成了一道题目:
假设排球场是个无限大的网格,即对于任意的整数z,都有x=z和y=z的直线存在,同学A(Ax,Ay)和同学B(Bx,By)站在整点坐标(即Ax,Ay,Bx,By都是整数)上,这个网格里面,还有另外一条直线H,用Px+Qy=R表示,现在A要走到B所在的位置,他只能沿着网格或者H这条线走,且只能在交点处换路。
求A走到B的最短路长度。

输入描述:

输入的第一行包含一个整数T,表示测试组数。
每个测试用例前面都有一个空白行。
每个测试用例由包含整数Ax,Ay,Bx,By和有理数P,Q,R。

输出描述:

对于每个测试用例输出一个数:表示求A走到B的最短路长度,结果保留三位小数。

感觉这题其实是道水题。。。

就是给你一个矩形,再给你一条直线,你要从矩形的一个顶点走到对面的那个顶点,只能在矩形的边上走或者在直线上走,求最短路。。。

如果直线与矩形没有交点,那么很显然答案就是矩形的长+宽

有交点的话如下图:

就有两种情况:①还是只沿着矩阵边走;②中间经过直线

比一下两种情况哪种更优就行了

#include<stdio.h>
#include<math.h>
#include<algorithm>
using namespace std;
double Len1(double x1, double y1, double x2, double y2)
{return fabs(x1-x2)+fabs(y1-y2);
}
double Len2(double x1, double y1, double x2, double y2)
{return sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
}
int Jud(double x, double c, double d)
{if(c>=d)swap(c, d);if(x>=c && x<=d)return 1;return 0;
}
double px[5], py[5];
int main(void)
{int T, cnt, i, j;double x1, y1, x2, y2, A, B, C, ans, y, x;scanf("%d", &T);while(T--){cnt = 0;scanf("%lf%lf%lf%lf%lf%lf%lf", &x1, &y1, &x2, &y2, &A, &B, &C);ans = Len1(x1, y1, x2, y2);if(A==0 || B==0)printf("%.3f\n", ans);else{y = (C-A*x1)/B;if(Jud(y, y1, y2))px[++cnt] = x1, py[cnt] = y;y = (C-A*x2)/B;if(Jud(y, y1, y2))px[++cnt] = x2, py[cnt] = y;x = (C-B*y1)/A;if(Jud(x, x1, x2))px[++cnt] = x, py[cnt] = y1;x = (C-B*y2)/A;if(Jud(x, x1, x2))px[++cnt] = x, py[cnt] = y2;for(i=1;i<=cnt;i++){for(j=1;j<=cnt;j++){ans = min(ans, Len1(x1, y1, px[i], py[i])+Len2(px[i], py[i], px[j], py[j])+Len1(px[j], py[j], x2, y2));ans = min(ans, Len1(x1, y1, px[j], py[j])+Len2(px[i], py[i], px[j], py[j])+Len1(px[i], py[i], x2, y2));}}printf("%.3f\n", ans);}}return 0;
}

牛客练习赛20:D. 最短路2相关推荐

  1. 牛客练习赛20:A. 礼物(组合数学/小球与盒子问题)

    链接:https://www.nowcoder.com/acm/contest/128/A 来源:牛客网 题目描述 如果不想读故事的話,可以直接跳到最后一段...     大一开学第一天,在学校的超市 ...

  2. 牛客练习赛20 托米历险记

    链接: https://www.nowcoder.com/acm/contest/128/E来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言524 ...

  3. 牛客练习赛61 D 最短路变短了(最短路,反向最短路)难度⭐⭐⭐★

    最短路变短了 链接 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/C++ 262144K,其他语言524288K 64bit IO Format:%lld 题目描述 给定一个有向带权图,其中 ...

  4. 牛客练习赛20 A-礼物(组合数学 or 完全背包求方案数)

    题目链接:https://ac.nowcoder.com/acm/contest/128/A?&headNav=www 题目描述 如果不想读故事的話,可以直接跳到最后一段...     大一开 ...

  5. 解题报告(一)C、(牛客练习赛41 F)简单数学题(数论 + FWT)(3.5)

    繁凡出品的全新系列:解题报告系列 -- 超高质量算法题单,配套我写的超高质量题解和代码,题目难度不一定按照题号排序,我会在每道题后面加上题目难度指数(1∼51 \sim 51∼5),以模板题难度 11 ...

  6. 牛客练习赛34 E little w and Digital Root(数位dp)

    title: 牛客练习赛34 E little w and Digital Root(数位dp) date: 2018-12-17 22:38:37 tags: 数位dp categories:ACM ...

  7. 牛客练习赛29 题解

    牛客练习赛29 A. 可持久化动态图上树状数组维护01背包 题解 这题跟标题没有任何关系- 贪心的使得负数删除的时候下标尽可能大,然后正数的时候下标尽可能小. 观察到每个数下标最大的时候就是它的初始下 ...

  8. 牛客练习赛#105(A-D)

    牛客练习赛#105 文章目录 牛客练习赛#105 A.切蛋糕的贝贝 B.抱歉,这没有集美 C.打牌的贝贝 D.点分治分点 A.切蛋糕的贝贝 题意 有一个正n边形,想通过下列的切法切成面积比为1:1:4 ...

  9. 牛客练习赛58 C.矩阵消除游戏

    牛客练习赛58 C.矩阵消除游戏 题目链接 题目描述 牛妹在玩一个名为矩阵消除的游戏,矩阵的大小是n行m列,第i行第j列的单元格的权值为ai,ja_{i,j}ai,j​ ,牛妹可以进行k个回合的游戏, ...

最新文章

  1. android studio编译提示错误:android Error:(21, 19) 错误: 程序包R不存在
  2. Linux编程练习 --多线程3--mutex
  3. 网易校园招聘历年经典面试题汇总:前端 岗
  4. python 解方程 sympy_用Python和Sympy求解方程并得到数值答案
  5. JTA(java telnet/ssh client)不能telnet/ssh远程机器问题与解决
  6. 触发器及其应用实验报告总结_带你了解IGBT驱动电路的应用
  7. 傲梅备份服务器系统,傲梅轻松备份服务器版
  8. java gbk文件转utf8_java 将GBK编码文件转为UTF-8编码
  9. Ibatis -- 一次执行多条SQL
  10. mysql2018漏洞_MySQL多个远程安全漏洞CVE-2018-2562/91 大批版本受影响
  11. 用Python写个魂斗罗,另附30个Python小游戏源码
  12. xp系统怎么更改计算机用户名和密码,xp系统如何设置开机密码|xp系统电脑怎么改密码-系统城...
  13. 阿里云短信类最新版dysmsapi.aliyuncs.com
  14. 希尔顿集团大中华区第450家酒店开业;Gap在山东青岛开新店 | 美通企业日报
  15. 教你用Python绘制3D地图,做出来效果太酷炫啦~
  16. 钱多多的互联网金融面试经验谈
  17. fastadmin 子账号看不到菜单,菜单没有查看,编辑等选项
  18. C++信息学奥赛题目归类:2007-2018初赛普及组单项选择题
  19. 创客基地oDrive第二课 X2212电机配置
  20. 个人项目——基于STM32的MQ-3酒精浓度检测

热门文章

  1. 简单python脚本实例-30个Python 小例子,帮你快速上手Python
  2. python工资一般多少西安-在西安为什么对Python编程需求这么大?工资这么高?
  3. python有哪些用途-Python能用来做什么?以下是Python的三大主要用途
  4. python可以做什么工作-Python入门后,想要从事自由职业可以做哪方面工作?
  5. python必背入门代码-python学习必备知识汇总
  6. java商城源码_盘点这些年被黑的最惨的语言,Java瑟瑟发抖
  7. mysql报错22_运行 mysql 遇到的两个报错
  8. [投稿] Speex回声消除原理深度解析
  9. 最简单的基于FFmpeg的移动端例子附件:SDL Android HelloWorld
  10. FFmpeg源代码简单分析:configure