P8309

· · 题解

这道题快算哭我了。

凡几何题先画图

看到两个 dalao 的题解,没有看懂和代码有甚么关系,但就是看起来狠厉害的样子,但还是没看懂,我只能是讲我自己的想法了

首先,对于四个毫无关系的点,我们会确定一个正方形使得每个点都分别出现在这个正方形的四边所在直线上(加粗是因为一开始没看到,然后分类讨论了好久/(ㄒoㄒ)/)。

那么正方形上每个点都一定与至少一个给定点在同一直线上(其实肯定是两个点,但这样子说好像严谨那么一丢丢),也就是说我们可以画一个张这样子的图:

也不难发现,我们其实只需要算出这四条直线的解析式,这个题基本上就宣告结束了,那么我们需要求解几个信息:

  1. 四条直线的解析式

  2. 每个点的位置如何用给定点的信息得到

因此我们就只需要求解这些就可以了,那么第一步就要先求解析式。

求解析式

我们用 k 来表示斜率,那每条直线都可以写成 y = kx + b 的形式,而对于斜率 k 来说,我们需要关注的就是相邻边的斜率:

\begin{aligned}l1: y = kx + b && l2: y = - \frac{x}{k} + b \leftrightarrow l1 \perp l2 \end{aligned}

也就是说,当两直线相互垂直,则其斜率乘积为 -1。而正方形邻边相互垂直,因此我们就可以用 k- \frac{1}{k} 来表示,因此对于一条 y = kx + b 的直线,我们知道点 (x_{1},y_{1}) 在该直线上,则一定有 y_{1} = kx_{1} +b 那么 b 就可以表示为 b = y_{1} - kx_{1},同理可得,所在直线就是 y = kx + y_{1} -kx_{1},由此可知,四条直线解析式即为:

\begin{aligned} l1:y &= kx + y_{1} - kx_{1} \\ l2:y &= -\frac{x}{k} + y_{2} + \frac{x_{2}}{k} \\ l3:y &= kx + y_{3} - kx_{3} \\ l4:y &= -\frac{x}{k} + y_{4} + \frac{x_{4}}{k}\end{aligned}

因此,可以通过“求解两直线交点坐标”的方式,将任意两个相邻解析式联立得到其交点的横坐标(因为他们的纵坐标相等),得到:

\frac{k^{2}x_{1}-ky_{1}+ky_{4}+x_{4}}{k^{2}+1} \\ \frac{k^{2}x_{1}-ky_{1}+ky_{2}+x_{2}}{k^{2}+1} \\ \frac{k^{2}x_{3}-ky_{3}+ky_{2}+x_{2}}{k^{2}+1} \\ \frac{k^{2}x_{3}-ky_{3}+ky_{4}+x_{4}}{k^{2}+1} \end{aligned}

求正方形四个点的坐标

那么如果将坐标系旋转 90°,那么我们就可以写出 x 关于 y 的表达式并求出四个点的坐标了:

S_{1}(\frac{k^{2}x_{1}-ky_{1}+ky_{4}+x_{4}}{k^{2}+1},\frac{k^{2}y_{4}-kx_{1}+kx_{4}+y_{1}}{k^{2}+1}) \\ S_{2}(\frac{k^{2}x_{1}-ky_{1}+ky_{2}+x_{2}}{k^{2}+1},\frac{k^{2}y_{2}-kx_{1}+kx_{2}+y_{1}}{k^{2}+1}) \\ S_{3}(\frac{k^{2}x_{3}-ky_{3}+ky_{2}+x_{2}}{k^{2}+1},\frac{k^{2}y_{2}-kx_{3}+kx_{2}+y_{3}}{k^{2}+1}) \\ S_{4}(\frac{k^{2}x_{3}-ky_{3}+ky_{4}+x_{4}}{k^{2}+1},\frac{k^{2}y_{4}-kx_{3}+kx_{4}+y_{3}}{k^{2}+1}) \end{aligned}

那现在的话,我们只需要求出来 k 的值就万事大吉了~~~。

更简单的发现:S_{1}S_{2} 相邻,S_{1} 又与 S_{4} 相邻,因此!!!

x_{S_{2}}-x_{S_{1}}=y_{S_{1}}-y_{S_{4}}

那么,(大家自己推哈),我们就得到了最终的结果:

\begin{aligned}k=\frac{y_{1}+x_{4}-y_{3}-x_{2}}{y_{2}+x_{1}-y_{4}-x_{3}} \end{aligned}

!!!!哦耶~。

好的到这就结束了,大家加上 long double 就可以安心拿满分了哦~~~~。