题解:P6894 [ICPC2014 WF] Crane Balancing

· · 题解

写在最前面

%%% 膜拜楼上巨佬 %%%

这篇题解的思路与楼上大佬相近,但感觉楼上大佬公式讲的不是很清楚(对 OIers 而言),于是本蒟蒻决定把公式推导一下 QwQ。

0.说明

可能的前置知识:

下文中记原点为 O

1.求重心

对于重心,先考虑把多边形剖成小三角形求重心,然后根据它们的质量进行合并。

1.1 求三角形重心

考虑 \triangle ABC,记其重心为 G,如何用 \overrightarrow{OA}\overrightarrow{OB}\overrightarrow{OC} 表示 \overrightarrow{OG}

BC 中点为 D,则 G 在线段 AD 上且满足 AG=2DG。由于 BCD 三点共线且 BD=CD,则有

\overrightarrow{OD}=\frac{1}{2}\overrightarrow{OB}+\frac{1}{2}\overrightarrow{OC}

又由于 AGD 三点共线且 AG=2DG,则有

\overrightarrow{OG}=\frac{2}{3}\overrightarrow{OD}+\frac{1}{3}\overrightarrow{OA}

综合两式,得

\overrightarrow{OG}=\frac{1}{3}\overrightarrow{OA}+\frac{1}{3}\overrightarrow{OB}+\frac{1}{3}\overrightarrow{OC}

1.2 求三角形质量

考虑 \triangle ABC,由题意得其质量可以表示为 S_{\triangle ABC}。由“二维向量叉积”(注:其实并没有这个概念,,,叉积其实只有三维向量有,,,)的几何意义得

m=S_{\triangle ABC}=\frac{1}{2}\overrightarrow{AB}\times \overrightarrow{AC}

1.3 合并两个多边形时的重心变化

记要合并的第一个多边形质量为 m_1,重心为 G_1,第二个多边形质量为 m_2,重心为 G_2,合并后的重心为 G

由重心的定义,当合并后以 G 为参考点时,合力矩为 0。因此有

m_1\overrightarrow{GG_1}=m_2 \overrightarrow{GG_2}

\frac{m_2}{m_1}=\frac{\overrightarrow{GG_1}}{\overrightarrow{GG_2}}

由三点共线定理,又有

\overrightarrow{OG}=\frac{1}{m_1+m_2}(m_1\overrightarrow{OG_1}+m_2\overrightarrow{OG_2})

当有多个多边形时,同理可以得出

\overrightarrow{OG}=\frac{1}{m_1+m_2+m_3+...}(m_1\overrightarrow{OG_1}+m_2\overrightarrow{OG_2}+m_3\overrightarrow{OG_3}+...)

因此我们就可以把物体的重心位置和质量求出来啦。

2.求答案

设支撑面为 l\sim r,重心所在横坐标为 x_0,起重机质量为 m_0,第一个点的坐标为 (x,y),挂的物体的质量为 m

分情况讨论:

a) x_0>r

(r-x)\times m_{min}=(x_0-r)\times m_0

m\ge \frac{x_0-r}{r-x}m_0 (r-x)\times m_{min}=(x_0-r)\times m_0 (l-x)\times m_{max}=(x_0-l)\times m_0

\frac{x_0-r}{r-x}m_0\le m \le\frac{x_0-l}{l-x}m_0

b) x_0<l

求法同 a),不再赘述。

c) l\le x_0\le r

(r-x_0)\times m_0=(x-r)\times m_{max}

m\le \frac{r-x_0}{x-r}m_0 m\le \frac{x_0-l}{l-x}m_0

OK,那到这里这个问题我们就推完了,剩下的就是代码实现的问题了。

代码就不放了,看楼上大佬的吧。