Toy と帽子と ADP BE

主にプログラミングに関わる話をゆるくエモくやっていきます

AtCoder Beginner Contest 163

うーん、Unratedですか・・・。まあ仕方なし。

各問題

A - Circle Pond

円の周長は直径×πで、与えられるのは半径Rなので、答えはR * 2 * πです。πは言語で提供されている定数があるならそれを使いましょう。定数がなければ、この問題は「絶対誤差または相対誤差が  10^{−2}以下であれば正解として扱われる」ので、3.1415くらいまで掛けておけば安心安全でしょう。

B - Homework

宿題をしなければならない日数を夏休みの期間から引いたものが遊べる日数なので、NからすべてのAを引けば答えです。ただし、これが負の数になった場合は夏休みの間に宿題が終わらなかったということなので、計算結果のかわりに-1を出力します。また0のときは0を出力するべきであることにも注意です。

C - management

与えられるのは上司の番号ですから、ある番号が出現した数がすなわちある番号の社員の直属の部下の数となります。なので、番号ごとに集計して、それを1から順に出力すればよいです。

見た目グラフの問題っぽいんですけど全然そんなことはなく、Bで出てもおかしくないようなレベルの問題でした。

D - Sum of Large Numbers

この問題、もし0からNまでのN+1個の数だとしたら話は簡単で、例えば入力例1の3 2の場合だと、2個で作れる最小の数0 + 1 = 1から、すべてを使って作れる最大の数0 + 1 + 2 + 3 = 6の間の数をすべて作ることができるので、答えは6通りとなります。

しかし、この問題は10^{100}からN+1個の数が対象です。よって、出力例1の解説にあるとおり足す個数分の10^{100}が余計に加算されます。なので、場合の数は足す個数ごとにわけて考える必要があります。

入力例1の場合、まず最低条件の2個で考えると、最小は小さい方から二つ取る0+1=1で、最大は大きい方から二つ取る2+3=5なので、5通りです。3個のときは最小が0+1+2=3で最大が1+2+3=6なので4通りです。最後に4個すべて取る場合は考えるまでもなく1通りです。よって合計すると10通りとなります。

やることは等差数列の和ですから、各個数毎にO(1)で求めることができて、最終的な答えはそれをKからN+1までについて求めて合計する必要があり、全体でO(N)で答えを求めることができます。

残りの問題

Unratedになっちゃったのでまだ見てません。(おい

まとめ

参加者の増加が想定を超えてしまっているっぽいので(先週のすぬけさんのツイートで、10000人を超えることがレート実装時(?)には想定されていなかったことが判明しました)、こういうこともありますかね。

自分としては参加し続けることくらいでしか貢献できないので、来週も当たり前に参加し続ける予定です。