题目地址

贼鸡儿猥琐的一道题

好在数据不毒瘤,而且Floyd就OK了。

这道题的难点在于 建图,也很考验模拟能力,需要十分的有耐心。

建图

题目中告诉了我们一个矩形的三个点

我们在平面直角坐标系中随便画出一个直角三角形,假设(x1,y1)是直角的这个点,(x4,y4)是我们要求的第四个点,那么:

\[x_4=x_2+x_3-x_1,y_4=y_2+y_3-y_1
\]

(因为我画图太渣只好文字解说)

我们尝试在原直角三角形的基础上把整个矩形画出来,矩形的四个顶点分别平行于坐标轴做平行线,得到了一个平行于坐标轴的大矩形EFGH,发现这里面有一些全等三角形,你就能证明出上面的结论了。

Q: 我们怎么知道哪个点是直角点呢?

A: 利用勾股定理逆定理。

建图部分就这样解决了。

求解

暴力双精度小数Floyd。

Code

#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdio>
#include<cmath>
#define N 507
using namespace std;
inline int read() {
int x=0,f=1; char ch=getchar();
while(ch<'0' || ch>'9') { if(ch=='-') f=-1; ch=getchar(); }
while(ch>='0'&&ch<='9') { x=(x<<3)+(x<<1)+(ch^48); ch=getchar(); }
return x * f;
}
int n,s,t,A,B,cnt;
int T[N];
double g[N][N];
struct Point {
int x,y,c; //c就是哪个城市
}P[N];
inline int Dis(Point p1,Point p2) {
return (p1.x-p2.x)*(p1.x-p2.x) + (p1.y-p2.y)*(p1.y-p2.y); //为了方便计算,这个是距离的平方
}
void work() {
cnt = 0; //初始化
s = read(), t = read(), A = read(), B = read();
for(int i=1;i<=s;++i) {
for(int j=1;j<=3;++j) {
P[++cnt].x = read(), P[cnt].y = read(), P[cnt].c = i;
}
T[i] = read();
int a = Dis(P[cnt-2],P[cnt-1]), b = Dis(P[cnt-2],P[cnt]), c = Dis(P[cnt-1],P[cnt]), x4, y4;
int x1=P[cnt-2].x, x2=P[cnt-1].x, x3=P[cnt].x, y1=P[cnt-2].y, y2=P[cnt-1].y, y3=P[cnt].y;
if(a+b == c) x4 = x2+x3-x1, y4 = y2+y3-y1;
if(a+c == b) x4 = x1+x3-x2, y4 = y1+y3-y2;
if(b+c == a) x4 = x1+x2-x3, y4 = y1+y2-y3;
P[++cnt].x = x4, P[cnt].y = y4, P[cnt].c = i;
}
memset(g,0x3f,sizeof(g));
for(int i=1;i<=4*s;++i) {
for(int j=1;j<=4*s;++j) {
if(i == j) continue;
double dis = sqrt(Dis(P[i],P[j])), w = 0.0;
if(P[i].c == P[j].c) {
w = dis * (double)(T[P[i].c]);
} else {
w = dis * (double)(t);
}
g[i][j] = g[j][i] = w;
}
}
for(int k=1;k<=4*s;++k) {
for(int i=1;i<=4*s;++i) {
for(int j=1;j<=4*s;++j) {
g[i][j] = min(g[i][j], g[i][k]+g[k][j]);
}
}
}
double ans = 0x3f3f3f;
for(int i=1;i<=4*s;++i) {
for(int j=1;j<=4*s;++j) {
if(P[i].c==A && P[j].c==B) {
ans = min(ans, g[i][j]);
}
}
}
printf("%.1lf",ans);
}
int main()
{
n = read();
while(n--) {
work();
}
return 0;
}

PS:这个人的题解质量越来越差了

Car的旅行路线(Floyd+模拟)的更多相关文章

  1. Car的旅行路线 luogu P1027 (Floyd玄学Bug有点毒瘤)

    luogu题目传送门! Car的旅行路线  问题描述 又到暑假了,住在城市A的Car想和朋友一起去城市B旅游.她知道每个城市都有四个飞机场,分别位于一个矩形的四个顶点上,同一个城市中两个机场之间有一 ...

  2. NOIP2001 Car的旅行路线

    题四 Car的旅行路线(30分) 问题描述 又到暑假了,住在城市A的Car想和朋友一起去城市B旅游.她知道每个城市都有四个飞机场,分别位于一个矩形的四个顶点上,同一个城市中两个机场之间有一条笔直的高速 ...

  3. 洛谷P1027 Car的旅行路线

    洛谷P1027 Car的旅行路线 题目描述 又到暑假了,住在城市A的Car想和朋友一起去城市B旅游.她知道每个城市都有四个飞机场,分别位于一个矩形的四个顶点上,同一个城市中两个机场之间有一条笔直的高速 ...

  4. 洛谷 P1027 Car的旅行路线

    P1027 Car的旅行路线 题目描述 又到暑假了,住在城市A的Car想和朋友一起去城市B旅游.她知道每个城市都有四个飞机场,分别位于一个矩形的四个顶点上,同一个城市中两个机场之间有一条笔直的高速铁路 ...

  5. [NOIP2001提高组]CODEVS1014 Car的旅行路线(最短路)

    最短路,这个不难想,但是要为它加边就有点麻烦..还好写完就过了(虽然WA了一次,因为我调试用的输出没删了..),不然实在是觉得挺难调的.. ------------------------------ ...

  6. GDOI2015小Z的旅行路线

    GDOI2015小Z的旅行路线 题意: \(n\)个点的无根树,边上有权值. \(q\)个询问\(s\)和\(s\),问从\(s\)出发,找一条最长路(不经过重复点),保证路径上所有边边权不超过\(x ...

  7. 【Foreign】旅行路线 [倍增]

    旅行路线 Time Limit: 20 Sec  Memory Limit: 256 MB Description Input Output 仅一行一个整数表示答案. Sample Input 3 2 ...

  8. AC日记——Car的旅行路线 洛谷 P1027

    Car的旅行路线 思路: 这题不难,就是有点恶心: 而且,请认真读题目(就是题目卡死劳资): 来,上代码: #include <cmath> #include <cstdio> ...

  9. P1027 car的旅行路线

    car的旅行路线 洛谷链接 这个题关键就是 如何把每个点表示出来,其实求出四个点的坐标后,只需要把这些点连接起来,用一遍folyed求出最短路径就好了. 代码: #include<cmath&g ...

随机推荐

  1. VMware 15 安装 macOS 10.14优质教程链接集合

    https://www.jianshu.com/p/25d2d781bd98 https://mp.weixin.qq.com/s/91Qc7L7E0xbVYXUcReUb_w https://blo ...

  2. [CSP-S模拟测试]:骆驼(模拟+构造)

    题目描述 我们都熟悉走马步,现在我们定义一种新的移动方式——骆驼步,它在一个国际棋盘上的移动规则是这样的. 以看出,骆驼步可以向八个方向走动,且不能走出棋盘范围. 现在给出一个$N\times N$的 ...

  3. [CSP-S模拟测试]:打扫卫生(暴力)

    题目描述 有$N$头奶牛,每头那牛都有一个标号$P_i1\leqslant Pi\leqslant M\leqslant N\leqslant 40,000$.现在$Farmer\  John$要把这 ...

  4. 语法检查程序LanguageTool学习和使用笔记

    这是LanguageTool的官方语法规则说明,一定要仔细研究,学会这个语法,就可以自己编写语法检查规则了,这篇文档上说,编写这份语法检查文档,你甚至都不需要是一名程序员: http://wiki.l ...

  5. Fabric基础架构原理(一)

    Linux基金会于2015年12月启动了名为“超级账本”(Hyperledger)的开源项目,旨在推动各方协作,共同打造基于区块链的企业级分布式账本底层技术,用于构建支撑业务的行业应用和平台. 超级账 ...

  6. Deepin 系统安装并配置PHP开发环境

    Deepin是由武汉深之度科技有限公司开发的Linux发行版.Deepin团队基于Qt/C++(用于前端)和Go(用于后端)开发了的全新深度桌面环境(DDE),以及音乐播放器,视频播放器,软件中心等一 ...

  7. 错误 warning: LF will be replaced by CRLF in README.md.

    问题类型 windows中的换行符为 CRLF, 而在Linux下的换行符为LF,所以在执行add . 时出现提示:warning: LF will be replaced by CRLF in RE ...

  8. 红帽虚拟化RHEV-PXE批量安装RHEV-H

    目录 目录 前言 软件环境 前提 部署 PXE 环境 使用 yum 安装所需软件 配置 DHCP 配置 TFTP-Server 配置 vsftpd 服务用于提供安装系统所需软件包 安装 kicksta ...

  9. 阶段1 语言基础+高级_1-3-Java语言高级_04-集合_01 Collection集合_1_Collection集合概述

  10. 阶段1 语言基础+高级_1-3-Java语言高级_06-File类与IO流_04 IO字节流_2_一切皆为字节

    这里的视频就是字节的形式,为了看着方便转换成了MB.一个字节就是8个二进制 包括文本,都是以字节的形式存储的