概要
問題文 → ■
公式解説 → ■
自分の提出 → ■
好きな問題です。楽しかったです。
解説で書かれていた方法とは違っていたので、書きます。私は結構難しい問題だと思いました。解けたので、書きます。
解法
小数部分が にある程度近いような小数 を適当な方法で作ります。以下のようにしました。
数列の構成
実数 の小数部分を、 と書くことにします。
実数 が与えられたとします。 とすると、 に対して が成り立ちます。 とすると、 に対して が成り立ちます。
以下、同様にして、 となる をとることができます。
は、ルートの和で書けることに注意しましょう。例えば となります。これらを合わせると、 個のルートの和を から引くことで、 の小数部分を 未満にできました。
で、 はおおよそ 倍の等比数列にしてあるので、だいたい です。 は上を見ての通り、 前後ですから、 はだいたい 以下にはおさまります(ちゃんと計算していないです)。したがって、 個のルートを引いた結果として、小数部分がとても小さな正の実数が残ります。最後にこれを非負整数(これも非負整数のルート)で近似すれば完成です。
の作り方
適当に探索しましょう。「 等で つの和を全探索する」 みたいなことをやります。 個の数が作られるので、誤差 くらいの数が見つかることを期待します。 まではこうやりました。さらに半分全列挙のテクニックを使って、 つ組と つ組も探すと、 も作れました。
コメント
の公比の目安 「 倍」は適当な値です。「 倍」くらいにすると、数列長の制約は簡単になる一方で 以下におさめにくくなるというトレードオフがあります。
なんかを見ると分かるように、そんなに にきちんと近い必要もないので、パラメータの取り方はとてもたくさんありそうです。ちょうど 項になったのは偶然でびっくりしました。使うパターンの工夫でまだ減らせると思います。
そもそも にたまたま 回現れた の寄与をまとめるだけで、 項が実現できます。このように異なる に同じルートが使われているとオトクです。ルートの中に使う数 を決め打って、 という形で小数部分を調整すると、さらに項数の少ない構成ができるような気がします。