246.1

凄くつまらないセットのような...。

250

PIのN桁目を四捨五入して答えよ、という問題。


Nは高々25程度なので、適当にやるだけ。二桁以上の繰り上がりは1回しか起こらないので、そこだけ例外処理してしまってもいいのかも。(そもそも25要素の配列を適当にコピペしながら作っても大差ないくらい。)

500

ある数字列を記述する際に、同時に三つの数字を記述できるようにできるとき、一番記述回数が少なくなる数字列のうち最小のものを答えよ、という問題。


その数字列の出現回数を数えれば良いが、重複しないように注意する必要がある。数える時は先頭からgreedyで問題ない。(と思いつつ重複を無視したり...。)

1000

整数Nの平方根に一番近い分母がD以下の既約分数を答えよ、という問題。


sqrt(N)から分母がiの時の分子として可能なものは、(int)(sqrt(N)*i)とその次だけ。(念のためにその前を見ておくと安心できるかも知れない。)これ以降はsqrt(N)を使うと精度が足りなくなりそうなので、両辺を二乗して考える。


分母がiのときの分子の値がaとすると、abs(N-a*a/i/i)が最小になるもののうち、iが最小のものを答えれば良い。(sqrt(N)は整数か無理数なので、複数のケースで同一の値を取っても約分すると同じ値になるのでiが最小のものを考えれば約分の概念はいらなくなる。)現在最小値をabs(N-c*c/m/m)とするのならば、abs(N*i*i*m*m-c*c*i*i)とabs(N*i*i*m*m-a*a*m*m)を比較して小さい方が一番sqrt(N)に近いと判定できる。iもmも高々1Kで、Nは高々1Mなので、longでやれば溢れない。