三井住友信託銀行プログラミングコンテスト2019

結果

順位    323rd / 3912
パフォーマンス  1901
レーティング    1835 → 1842(+7)

 全完早解きセットだったので3WAを出すようではそれほど良い順位にならない。

A - November 30

  D_2 = 1で判定。出力のYes/Noが1/0だと判定をそのまま出せば良いので楽なんだな。

 提出

B - Tax Rate

 †全探索†

 提出

C - 100 to 105

 なんかちょっと手を止めて考えたら最小での個数が100で割った値で、個数×105までは自由に選べそうなのでそんな感じの O(1)を(無証明で)書いた。実際に方針として選ぶかどうかは別の問題として、DPがさっぱり思い浮かばないの自分でも呆れるな。

 提出

D - Lucky PIN

 各場所 iについて、自分より左に出現している文字の集合と、自分より右に出現している文字の集合をあらかじめ構築しておいて、あとはループして実際に構築して答えの集合に突っ込んでいってサイズを出力。ちょっと計算量重いかなと思ったけど、解説PDFを見るにもっと重い解法でも大丈夫っぽいのでそういうのに救われた。

 提出

E - Colorful Hats 2

 最後答えに 3!をかけるという思考にとらわれ、 0の時だけ特別扱いをするという意味不明なことをして1WA。美しくない処理を平気で提出してしまうのひどいなぁ。

 提出

F - Interval Running

 とりあえず適切にスワップして、 T_1 + T_2秒後に多く移動している方を Aとして固定して考えたくなる。そうすると A_0 \gt B_0なら交わることがなく、 A_0 \lt B_0の場合にのみ 0から T_1まででで1回、 T_1から T_2でもう1回交わる可能性があって、それは距離の差がある値になるまで続く。よってその限界値を2分探索すればOK、と思ったのだが、最後にちょうど時刻 T_1で1回交わる場合に対処できてなくて2WA。

 よく考えればこれは二分探索をする意味がない。普通に割り算で求められることを無駄にやって混乱してWA出して、ということになっている。冷静さがない。

 さらに言えば解説PDFを見ると出会う場所がint64_tを超える場合があるらしく、全然注意してなかった。なんとなく差分っぽい感じで計算したのでそれは回避できていたようだが、運が良かっただけ。

 提出