牛客练习赛20:D. 最短路2
链接:https://www.nowcoder.com/acm/contest/128/D
来源:牛客网
题目描述
"叮..!"手机屏幕突然弹出一则提醒,"您下午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相关推荐
- 牛客练习赛20:A. 礼物(组合数学/小球与盒子问题)
链接:https://www.nowcoder.com/acm/contest/128/A 来源:牛客网 题目描述 如果不想读故事的話,可以直接跳到最后一段... 大一开学第一天,在学校的超市 ...
- 牛客练习赛20 托米历险记
链接: https://www.nowcoder.com/acm/contest/128/E来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言524 ...
- 牛客练习赛61 D 最短路变短了(最短路,反向最短路)难度⭐⭐⭐★
最短路变短了 链接 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/C++ 262144K,其他语言524288K 64bit IO Format:%lld 题目描述 给定一个有向带权图,其中 ...
- 牛客练习赛20 A-礼物(组合数学 or 完全背包求方案数)
题目链接:https://ac.nowcoder.com/acm/contest/128/A?&headNav=www 题目描述 如果不想读故事的話,可以直接跳到最后一段... 大一开 ...
- 解题报告(一)C、(牛客练习赛41 F)简单数学题(数论 + FWT)(3.5)
繁凡出品的全新系列:解题报告系列 -- 超高质量算法题单,配套我写的超高质量题解和代码,题目难度不一定按照题号排序,我会在每道题后面加上题目难度指数(1∼51 \sim 51∼5),以模板题难度 11 ...
- 牛客练习赛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 ...
- 牛客练习赛29 题解
牛客练习赛29 A. 可持久化动态图上树状数组维护01背包 题解 这题跟标题没有任何关系- 贪心的使得负数删除的时候下标尽可能大,然后正数的时候下标尽可能小. 观察到每个数下标最大的时候就是它的初始下 ...
- 牛客练习赛#105(A-D)
牛客练习赛#105 文章目录 牛客练习赛#105 A.切蛋糕的贝贝 B.抱歉,这没有集美 C.打牌的贝贝 D.点分治分点 A.切蛋糕的贝贝 题意 有一个正n边形,想通过下列的切法切成面积比为1:1:4 ...
- 牛客练习赛58 C.矩阵消除游戏
牛客练习赛58 C.矩阵消除游戏 题目链接 题目描述 牛妹在玩一个名为矩阵消除的游戏,矩阵的大小是n行m列,第i行第j列的单元格的权值为ai,ja_{i,j}ai,j ,牛妹可以进行k个回合的游戏, ...
最新文章
- android studio编译提示错误:android Error:(21, 19) 错误: 程序包R不存在
- Linux编程练习 --多线程3--mutex
- 网易校园招聘历年经典面试题汇总:前端 岗
- python 解方程 sympy_用Python和Sympy求解方程并得到数值答案
- JTA(java telnet/ssh client)不能telnet/ssh远程机器问题与解决
- 触发器及其应用实验报告总结_带你了解IGBT驱动电路的应用
- 傲梅备份服务器系统,傲梅轻松备份服务器版
- java gbk文件转utf8_java 将GBK编码文件转为UTF-8编码
- Ibatis -- 一次执行多条SQL
- mysql2018漏洞_MySQL多个远程安全漏洞CVE-2018-2562/91 大批版本受影响
- 用Python写个魂斗罗,另附30个Python小游戏源码
- xp系统怎么更改计算机用户名和密码,xp系统如何设置开机密码|xp系统电脑怎么改密码-系统城...
- 阿里云短信类最新版dysmsapi.aliyuncs.com
- 希尔顿集团大中华区第450家酒店开业;Gap在山东青岛开新店 | 美通企业日报
- 教你用Python绘制3D地图,做出来效果太酷炫啦~
- 钱多多的互联网金融面试经验谈
- fastadmin 子账号看不到菜单,菜单没有查看,编辑等选项
- C++信息学奥赛题目归类:2007-2018初赛普及组单项选择题
- 创客基地oDrive第二课 X2212电机配置
- 个人项目——基于STM32的MQ-3酒精浓度检测
热门文章
- 简单python脚本实例-30个Python 小例子,帮你快速上手Python
- python工资一般多少西安-在西安为什么对Python编程需求这么大?工资这么高?
- python有哪些用途-Python能用来做什么?以下是Python的三大主要用途
- python可以做什么工作-Python入门后,想要从事自由职业可以做哪方面工作?
- python必背入门代码-python学习必备知识汇总
- java商城源码_盘点这些年被黑的最惨的语言,Java瑟瑟发抖
- mysql报错22_运行 mysql 遇到的两个报错
- [投稿] Speex回声消除原理深度解析
- 最简单的基于FFmpeg的移动端例子附件:SDL Android HelloWorld
- FFmpeg源代码简单分析:configure