ABC198

 こんばんは。2年前から使っていたDynabookWindowsが突如起動しなくなり諸々のデータの救出やらなんやらで半月ほどAtCoderどころか競プロ関係が何もできていなかった島崎翔です。今日はABC198に参加したので記録をしておきます。


A - Div

 $n$個のお菓子を横一列に並べて、どこかの隣り合う$2$個のお菓子の間に仕切りを置いてその仕切りより左は$A$君に、右は$B$君に、とでもすれば分けられます。植木算の考え方です。


B - Palindrome with leading zeros

 例えば平仮名やアルファベットで$n$文字の文章が回文であるかどうかを判断するには、前から$i$文字目と後ろから$i$文字目が同じ文字であるかを$i=1$から$i=n$まで(とするとほとんどの部分を$2$回調べることになり実際は$i=int((n+1)/2)$までで十分)調べればよいです。
 今回は後ろのほうの$0$を無視できるので「$1$文字目の数字から「$0$以外で最も後ろにある」ような数字までが回文であるか」を調べます。
 私は最初$int$で受け取って演算で何とかしようとしましたが思うように書けなかったので結局$string$で受け取りました。文字列$s$の$i$文字目を$s[i]$と書いて$WA$。競プロから離れていたので細かいミスが多いですね。


C - Compass Walking

 基本的に最短経路で向かって最後の$2$歩で調整(参照:入力例2)すればよいと考え天井関数を用いて実装するも$WA$。誤差に殺されたと考えて$sqrt$演算を消すも$WA$。一瞬オーバーフローを疑うも制約的にありえない。
 遠い場合のみ考えていたが改めて考えてみると何のことはない。歩幅がめちゃくちゃ長くて目的地がめちゃくちゃ近かったら$1$歩で到着できないではないか。気付けば簡単、その部分の判定を追加して$AC$。


結果・感想

https://atcoder.jp/users/ShoShimazaki/history/share/abc198atcoder.jp
 何故かジャッジがめちゃくちゃ重いし手元の環境は整えてなかったので割とイラついて適当なコードを投げまくったらかなりペナを食らいました。落ち着いてコーディングしたいですね。そしてやはりしばらくコードを書かないと細かいところ($0-indexed$など)にミスが出ますね。出来るだけ毎日続けていきたいです。


 D問題を早々に諦めて書き始めたのでコンテスト終了前に書き終わってしまいました。終わるまで公開しないように気を付けないといけませんね。今日はこれで終わります。