Official

C - Minimize Abs 2 Editorial by nok0


適切な範囲で全探索を行うことで答えを求めましょう。

まず、\(x\) として考える必要がある値を全て試します。ここで、\(x\) としては \(0\) から \(\lceil \sqrt{D}\rceil\) までの値のみを考えればよいことが示せます。

証明:\(x\)\(\lceil \sqrt{D}\rceil\) より大きいとき、\(y=0\) とするのが最適ですが、このときの \(|x^2+y^2-D|\) の値は明らかに \(x=\lceil \sqrt{D}\rceil,y=0\) のときより大きくなってしまいます。

\(x\) を固定すると、\(C=x^2-D\) と置くことで \(|y^2 + C|\) を最小化する問題になります。

\(C\) が非負の場合は \(y=0\) が明らかに最適です。 \(C\) が負の場合、最適な \(x\)\(y=\lfloor \sqrt{-C}\rfloor, y=\lceil\sqrt{-C}\rceil\) のいずれかなので、この二つを試せばよいです。

結局、\(x\) を固定したときの答えが \(\mathrm{O}(1)\) で求まり、\(x\) として考える値の種類数は \(\mathrm{O}(\sqrt{D})\) なので、この問題を \(\mathrm{O}(\sqrt{D})\) で解くことができます。

posted:
last update: