パナソニックプログラミングコンテスト2020

朝微熱があって、おいおいrng_58回には絶対参加したいぞと思って寝てた。幸い普通に参加できたけど、全部を楽しむだけの頭がそもそもなかった。悲しい。

またこういうセットやりたいなあ。

A - Kth Term

コピペして配列作れるので好き。それができない人は32行書けってことなんか(きびしい)。

B - Bishop

半分。切り上げっぽい。制約確認したら2以上とは限らなかったので慌てて場合分けした。

C - Sqrt Inequality

両辺とも正なので2乗しても同値。移項して2*sqrt(a*b) < c-a-b。左辺は正なので右辺が0以下ならNo。そうでないとき両辺を2乗しても同値なので、これでルートがなくなる(整数演算だけでできる)。という考察ができなくて、ゴミのような提出をした。最初から整数でやろうとしてたのであまり考えてないが、普通にdoubleで計算したコードの撃墜が思い浮かばないので考えたい。

D - String Equivalence

DFS。それまでに使った最大の文字より1大きい文字までしか使えないとすればよさそう。が、最後に使った文字が最大とは限らないんだよなあ。盛大にパフォを溶かしたが、全くバグってる気がしなくてずっとEをやっていたので時間は無駄にせず済んだ。

E - Three Substrings

順番を決めて6通り、貪欲にくっつけていく。のはすぐ思いつくけど'?'があるのでそれではダメかも。なかなか反例をだせなかった。かなり経って思いつく(czc c?cxyz cbcxyz)。かなり時間が経っているので、とりあえず書いて提出してみる。かなりWAがある。あんまレアケースじゃないのかなあ。「貪欲は反例があるからダメ」としかわかってなくて、雰囲気が全然つかめてない。どのくらいダメなのか。WAがたくさんだからけっこうダメそうだなあ、みたいな(まあコーナーは色々あってたくさん置くかもしれないけど)。自分はZ-algorithmとか知らないので、「それが使えるのかも?」という不安が出てしまう。今回は使えなかったらしいが、使えない問題でこそ悪影響が出てしまう。

F - Fractal Shortest Path

ここまで来れないの悲しいね。一応コンテスト中に読んだ(結果が出ないのはともかく、Fに関われないの悲しすぎるでしょ)。自分がどこにいるか調べて高々1個の迂回すべき黒マスを見つけるとか。いやどうせ解けないならFやりたかったなあ(結果論ぽい(結局実力が低いのがいけないんだよ))。

(追記)座標から1引いて3進法で表すと、(r, c)が3^k*3^kの黒マスの内部にある条件は、rとcの下からk桁目(0桁目が最下位)がともに1であること。迂回すべき黒マスはまっすぐ進めば当たる。繰り上がりに気をつけながら各桁が移動中1になるかチェック。あとは発見した黒マスのどちら側を通るか試せばいい。