95. 今日解いた問題(2022.04.05)
今日解いた問題についてまとめます。
自分で解きたい方のために、最初に問題だけ置いて、後で自分の解法を書きます。
問題一覧
- A - Floor, Ceil - Decomposition (Diff: 634)
- B - Sum of Three Terms (Diff: 1239)
自分の解法など
A - Floor, Ceil - Decomposition
目的を達成するための最適な戦略を考察します。
を に書き換えると、積はどのように変化するでしょうか。大まかに見積もるため が 2 つ登場すると考えると、この部分の積は になります。よって、 であれば書き換える、 であれば書き換えない戦略が有効そうです。実際、 など周辺値で確かめて、この仮説が正しいことが分かります。
よって、 を書き換える操作を繰り返して得られる数を、全て 以下にしたあと積を取ると答えです。ただし、制約が大きいので単純にシミュレーションすると間に合いません。ここで、「値を半分に(近い値に)する操作を繰り返す」ということを考えて、同じような計算が多く登場することに注目すると、メモ化再帰で くらいに落とせることが分かります。
B - Sum of Three Terms
各項の関係を数式で表現することで考察します。
と並べてみると、 であることが分かり、整理すると です。同様に、以下のような式が導出できます。
このように、 の全ての項が最初の 3 項を用いて表現できることが分かりました。 は入力から与えられるので定数として考えてよいです。よって、この問題は を決定する問題と読み替えることができました。もっと言えば、 であり、 の 2 項を決める問題であると言い換えられます。
という暗黙の制約があるので、単純な探索は不可能です。ただし、 の各項から の「差」を求めることはできています。任意の について を満たす必要があるため、最初の 3 項に対応する「差」の最小値を求めます。ここで見た項が 以上になればよいので、結局、
- 「差」の最小値が非負であれば
- 「差」の最小値が負であれば、その絶対値
とすれば、「全ての項が非負」という条件を満たす最小の を求められます。また、 という制約を考えて、 はできるだけ小さな値を取ると、 を正にするという戦略において有利であることが分かります。よって、この条件で を決定するのが最善です。
最後に を計算し、負、または、対応する「差」の絶対値より小さければ適切な を作れないことになります。それ以外の場合、「差」の情報を組み合わせて を構築することができます。
まとめると、各項の「差」を求めるのに 、初め 3 項の決定は定数時間、各項の構築は で達成できるので、全体として で解けます。