今天,是个重大一天,因为从今天起,为了大家有更好的体验,我将对我的题解进行全新改版!!
(不满的lovechq:你不就还有5天就去备战高考了吗?现在改版有啥用?
来自cgg的答复:虽然,在过几天,我会和大家依依不舍地道别,因为我真的要去备战高考了,但是明年暑假我会强势回归的!请各位放心)
知识点
(cgg解释:这里是为了让大家看到此题涉及的知识点,可以提前预习)
计算几何
向量,两点间距离公式
图论
邻接矩阵、Floyd(最短路)
基本思路
(cgg解释:这个版块是为了有些巨神准备的,因为巨神有时候只是一时短路,只要简单看看思路就可以了,所以在这里把思路简单整理一下,便于查看)
用数据结构去保存城市和点。
用向量求第四个点。
然后建图,算出每两个点之间的花费。
Floyd
详细解释
(cgg解释:这个版块是解释上面没有说清楚的地方)
保存城市和点
我们可以写两个结构体,一个是点,一个是城市。
计算第四个点
我们先来看看怎么计算第四个点。
我们可以先计算出来已知的三个点两两之间的距离,由于是矩形,我们一定有一个斜边,也就是矩形的对角线,也就是我们求出的三个距离中最长的那一个
那么接下来怎么处理呢?
我们来看一个图:
其中ABC三点已知。
我们观察向量BC和向量AD(你不知道向量?快戳开)
因为四边形ABCD是矩形,所以向量BC和向量AD应该相等。
所以(x3-x2,y3-y2)=(x4-x1,y4-y1)
所以我们就可以求出来第四个点了:
x4=x3+x1-x2
y4=y3+y1-y2
这样就大功告成了!
建图计算距离
计算距离就用两点间距离公式
然后注意枚举顺序,依次计算出每一个点到同一个城市其他点的花费,再计算到其他城市每一个点的花费。
注意不只是距离,还要乘上每单位长度的花费。
用邻接矩阵就好了
Floyd
最简单的最短路算法,就不说了。
最后只要对起始和终点城市的每个飞机场之间的距离进行枚举,得到最小值即可。
难度点评
(cgg解释:客观地评价)
不是很难,没有什么思维难度,重在考察代码能力。
代码
(cgg解释:这显然是题解不可少的一部分)
!!!请注意:vijos的题目和洛谷的不一样
本处只提供洛谷的代码
vijos的题目没有多组数据,且保留两位小数