AtCoder Beginner Contest 163
ABC163お疲れ様でした。コンテスト中にTwitterを見ないので、unratedに気づかずに100分やってました。
入水がかかっていたので焦っていたのもあるかもしれませんが、個人的にかなり反省の多いセットでした。パフォーマンスは1173で、ratedであればレートは若干下がっていました。いずれにせよ入水はお預けといったところでしょうか。
A - Circle Pond
実数に気をつけながら、を出力します。
テンプレートに long double PI = acos(-1) を入れていなかったので、今後は入れておこうと思います。
B - Homework
宿題はバラバラに与えられますが、合計値(とする)しか気になりません。
ならで、それ以外ならです。
宿題は計画的にやりましょう。
C - management
一つ目のやらかし。
問題を誤読して、その人以下の部下の数を全て出力する問題だと勘違いしていました。グラフとして考えれば良いからdfsだ、的なことを考えながら実装していたのですが、見るべきは「直属の部下」だけなので、各数字の出現回数を追うだけで問題ありません。
これで15分も溶かしてしまったのでガチで反省したほうが良いです。
D - Sum of Large Numbers
二つ目のやらかし。
「和としてあり得るものの個数のmod」を「和のmodとしてあり得るものの個数」と誤読して、10分ほど時間を無駄にしました。以下、ちゃんと題意を把握してから考えた考察です。
和として取りうる値を考えます。適当にサンプルを見ると、それぞれの和については「()+ (からまでの中の個の整数の和)」となっていることがわかります。ここで、(からまでの中の個の整数の和)がを超えることは到底ないので、この二つの項をそれぞれ一意に定めれば、和が一意に決まるということになります。
となると、(からまでの中の個の整数の和)の取りうるパターン数を求めれば良いということになります。このうち最小のものは、からまでの和で、最大のものはからまでの和です。そして、このあいだの値は全て、からまでの整数から個ピックアップしてきたものの和として表すことができます。(例えば、最小値より大きいものを作る場合は、をにswapすれば良いです)
したがって、個選んだ時の和のパターンは、となります。これを計算していては間に合わないので、数列の和の公式で計算すればで求まります。
最後に、なので、for文を回して合計を取れば答えが出ます。ちなみにこれも数列の公式で頑張ったらでいけそうですが、「計算量は贅沢に使え」という教訓のもと、PCに計算させました。
誤読に気づいてからは10分ほどで捌けました。たらればは断じて良くないですが、CDの誤読で合計15分溶かさなかったとしたら、パフォーマンスは推定1500ほどでした。
僕は早解きが得意ではないのですが、その原因はこういった誤読やペナが多いです。それによりかなりのパフォーマンスを捨てているので、落ち着いて的確に問題を捌けるように注意したいです。
E - Active Infants
優先度を決めてはめていくという発想自体は合っていたのですが、dp使うとシンプルに捌けることがわかって感動しました。計算上黄diffとなっていますが、unratedで撤退した人が多かった結果diffが少し上がったのではないかと思っています。
dpかなり苦手(というか典型からあまり理解していない)なのですが、「1. その問題に対してdpが適用できることがわかる」「2. dpテーブルを的確に置く」「3. 漸化式を正確に立てる」「4. 適切な順でdpテーブルを埋める」という感じで、ハードルが数ステップある気がしています。僕の場合は1, 2の時点であまりできていないので、とりあえず色々問題を漁ってみようと思います。
次回も頑張りましょう。