C - 平均値太郎の憂鬱 ( The melancholy of Taro Heikinchi ) Editorial by kumjin3141


\(X, Y\) について、それぞれを \(\text{gcd}(X, Y)\) で割り、 \(X, Y\) が互いに素な状態にします。
この時、\(1\) から \(N\) の和が \(N(N + 1) / 2\) で与えられることを用いると、

\[ \frac{X}{Y} = \frac{N(N + 1) - 2M}{2N} \Leftrightarrow 2NX = (N(N + 1) - 2M) Y\\ \Leftrightarrow 2N = kY, N(N + 1) - 2M = kX\;(k \in \mathbb{Z}) \]

ここで、最後の変形は、 \(X, Y\) が互いに素であることを使いました。

また、\(N > 0\) だから \(k > 0\), \(M\)\(0 < M \leq N\) を満たすため

\[ N^2 - N \leq kX < N^2+ N \Leftrightarrow k^2Y^2 - 2kY \leq 4kX < k^2Y^2 + 2kY\\ \Leftrightarrow \frac{4X}{Y^2} - \frac{2}{Y} < k \leq \frac{4X}{Y^2} - \frac{2}{Y} \]

よって、\(k_1 < k \leq k_2\) とすると、 \(Y \leq 1\) より \(k_2 - k_1 = 4/Y \leq 4\) です。

ゆえに、条件を満たす \(N, M\) を生成する可能性のある \(k\) は高々 \(5\) 個であるため、このような \(k\) 全てについて \(N, M\) をできるか判定し、生成できた \(N, M\) を出力すれば良いです。

\(N = kY/2\) であるから、 \(k\) の昇順に生成された \(N, M\) を出力すれば題の出力の条件は満たされます。

実装例

posted:
last update: