Toy と帽子と ADP BE

主にプログラミングに関わる話をゆるくエモくやっていきます

AtCoder Regular Contest 160

1完、56:19。

各問題

A - Reverse and Count

f(1, x) と、Lを先頭に固定して考えてみると、A_1 > A_x となるような x をとった場合は、その順列は先頭から 1 番目 ~ (A_1 - 1) 番目となります。A_1 < A_x の場合は後ろから1 番目~ (N - A_1) 番目となります。

K がそれらの範囲の中にある場合はそこで答えを出力して終了すればよいです。中にない、つまり K が (A_1) 番目 ~ うしろから (N - A_1 + 1) 番目の範囲にある場合は、f(2, x) で同様のことをします。もちろん K を確認する範囲は都度狭まっていきます。そこでも確定しなければ f(3, x), f(4, x) ... と徐々に狭めていけばよいです。最後まで確定しなかった場合、それはソートしなくてよい場合なので与えられた順列をそのまま出力すればよいです。

B - Triple Pair

x が N/2 より大きいときは y, z は 1 しか取れない、とかいう具合にチェックする量は少なく済むとは思うのですが、三つの値をうまく検査する方法がわからず...。

まとめ

B の方が解かれてるのかー。確かに数学強い人なら B の方が解けそうではあります。