徒然

思いついたら書きます

AtCoder Beginner Contest 292 F - Regular Triangle Inside a Rectangle 解説

はじめに

ABC292のF問題で幾何問題が出ました。
自分は他の方と解答アプローチが異なったので解説記事を書いてみます。

問題

A、横Bの長方形で囲まれた内部に描ける正三角形の一辺の長さの最大値を求めよ。

atcoder.jp

解答

前提としてA \le Bとします。A \gt Bの場合はswapして考えます。
またB \ge \frac{2}{\sqrt 3}Aのときは\frac{2}{\sqrt 3}Aが答えになるので説明を省きます。*1

与えられた四角形をEFGHとして、点E及び辺FGに接する正三角形EPQを描きます。
各辺の長さはxとします。
そして点Qから辺EHに垂線を引き、交点をTとします。

すると\angle FEP\arccos \frac{A}{x}で表され、\angle HEQ\frac{\pi}{6} - \arccos \frac{A}{x}となります。
したがってETの長さはx \cos (\frac{\pi}{6} - \arccos \frac{A}{x})となり、B以下であれば長方形の内部である条件を満たし、Bと一致するときが最大となります。

このようなxは二分探索で求めることができます。探索範囲は条件よりA \le x \lt \frac{2}{\sqrt 3}Aです。*2

実装

atcoder.jp

所感

がっつり数学問題なので苦手な人には辛そうですが、アプローチ方法が複数あって個人的には良い問題だなと思いました。

*1:正三角形の1辺が長さBの辺に接するのが最適となる

*2:出力例1を参考に、下限を(\sqrt 6 - \sqrt 2)Aとしても良いです。