メモ@inudaisho

君見ずや出版 / 興味次第の調べ物置き場

AtCoder 「みんなのプロコン2019」予選 3完 黒歴史

総括

 今回三完。黒歴史の回。どこが黒歴史か、書きたくないのだが、書いていく。Cでハマってそれで終わった。ちなみに全部静的に解いた。

AB

 今回A出すのに5分もかけてしまった。どうも気が焦って1づつの隙間が何個あればよいかパっと頭にでてこずモヤモヤしてたせいでそんなにかかった。Bはそこからさらに15分。これも絵に書いたら簡単だったものの、方針がすぐに立たずにすこし模索したのでそうなった。全部連結されているので線状にならず星状になったらダメだがそれを出すのにいちいち木をつくって三本つながってる点があったらダメとした。構築して枝の数を数える。どうも迂遠だ。

 ここまで時間かかったのは手の遅い自分としてはよくあることで黒歴史ではない。

C

 さて黒歴史のCだ。Cも動的なものを書かず静的に解いたのだが、あにはからんや、テストケースが一つ抜けない。うーむ。こういうときはどっか境界条件適当に書いてるせいだなと見直すがどこが間違えているのかよくわからん。

K,A,B=[int(_) for _ in input().split()]
if B <= A+2 or K <= A+1 :
    print(K+1)
else:
    d = (K+1) - (A+2)
    d = (d // 2) * (B-A)  + (d%2)
    print( d + B)

 すぐ解決して、あと一問とりかかれるだろうとおもいきや、最後までこの問題の見直しに足を取られてしまった。上の問題でどこをまちがえていたかというと、最初の条件のここだ。そんな初歩的なところで落としてるとは思わず後ろの方ばかり見直してたので気付くのが遅れた。

K <= A+1

 こんなとこで穴を開けてしまって通せなかったのがつらい。これ、交換が一回できるかできないかという条件で一回ちょうどできるのを取り零していたわけでまさに境界値。=がいらない。間抜け罠.. そこに気付いてなんとか通したが終了12分前。しかも解答率無茶苦茶高い.....

 ただこういう時後ろの問題を検討しに行ってよく虻蜂取らずになっていたところ、行かずに最後までやったのは悪くなかったかな。それくらいしか褒めるところがない。

レート

 今回こそレート落ちるだろ。まぁ落ちた方がよい。

f:id:inudaisho:20190209233830p:plain
レート落ちた

 ちゃんと落ちてた。意外と落ちないもんだな。

SanDisk Cruzer Fit USBフラッシュメモリー 32GB [国内正規品] SDCZ33-032G-J57

SanDisk Cruzer Fit USBフラッシュメモリー 32GB [国内正規品] SDCZ33-032G-J57