前回解けなかったAtCoder035のCを解き直した。
マスクビット列の生成を文字列 -> to_iしていて(("1" * n).to_i(2)
) 遅かったので、Integerで作るようにした。
n個の連続した 1
を作るには 2^(n-1)-1
すればいい。
前回よりも解ける範囲は増えたが、やはりTLEになってしまった。。
そうしたら、前回の記事に
C問題、「いもす法」というヒントをコメントします...!
というヒントを頂いた。
今回の問題の場合、オセロを反転させる範囲を矩形関数として見ることができるので、そこに利用する。 これを使って解いたところ一発で通った!!
野生のsuzupyありがたやぁ〜 🙇
↑で解けることがわかったので調子にのってAWKでも解いてみたw 解法がわかっていればAWKでも解けないことはないですね。