いろいろな記録

大学院生やってます

AtCoder Beginner Contest 169

ABC169お疲れ様でした.4完15ペナでパフォは917でした(?????)

 

久しぶりに激しくやらかしたので反省会です.

atcoder.jp

 

 

A - Multiplication 1

令和ABC史上最も簡単?

B - Multiplication 2

とりあえず5ペナ.次のものをかけた際に現在の値が1e+18以上かの判定だと,かけたものの値が1e+19を超えて,long longでもオーバーフローしうるということを知りませんでした.

結局python3で通したのですが,C++なら割り算で判定すればいいですね.

参考にさせていただきました:

【灰色・茶色必見!】変数の型と扱える数の範囲 - オーバーフローとは? - プログラミング日記

C - Multiplication 3

7ペナ.流石にやってる途中に笑ってしまいました.

浮動小数を定数倍して整数にした時に誤差が生じ得ることを知りませんでした.最終的にはbを文字列として受け取って,小数部分を無理やり整数化して解きました.思いつくのがあまりにも遅かった.

D - Div Game

これは比較的簡単でした.約数の個数をmapで列挙していって,各々の約数の個数に対して 1,\,2,\,3\cdotsを順に引いていき,可能な試行回数をカウントしていけばいいですね.

E - Count Median

4完までに95分かかってしまったので間に合いませんでした.コンテスト終了後にすぐ解けたので残念です.

F - Knapsack for All Subsets

いけそう?後でやります.

 

---

今回はたくさん教訓が得られたので列挙しておきます.

  • 小数は極力使わない.受け取りの際から可能な限り整数として扱う.
  • 途中で出てくる値が1e+18を超えうるときは,多倍長整数を使うか,素因数分解,割り算などの工夫を用いる.
  • WAを出した時は,コードの各箇所から怪しい部分を列挙して原因究明に務める.非本質な改善(文法を変えるだけなど)をとりあえず投げるという行為を絶対にしない.

 

知識が甘かった自分にとっては至極教育的な回だったと思います.レートは-34でしたが,勉強代にしては安かったのではないでしょうか.

次回も頑張りましょう.