ABC217参加しました(A,B,C問題解説)
前回解いたやつ
おはようございます。
良い朝ですね(地域差あり)。
昨日のABC217に参戦したので感想とか書いておきます。
言語はPythonです。
目次
A問題
問題
辞書順の大小を表す問題ですね。
minとmaxは辞書順に対応してたよなーって思いながら場合分けしていけば解ける問題でしたね。
僕はこんな感じのコード書いときました。
s,tを配列に突っ込むと、indexが0と1になるので、if文の場合分けがかっこ良くなるかもね。
(配列のbool型のif文みたいにできるかもね)
B問題
問題文
B問題なので、言われた通りに全探索すれば解ける問題でしたね。
ただ、素直にやろうとすると場合分けがandでつなぎまくらないといけなくなるので、
ダルいし、めんどいし、汚いし、読みにくいしでいいことなしですよね。
というわけでnotを使うとif文がきれいになりました。
こんな感じのコードで提出しました。
配列の中に要素が入っているかどうかを判別するにはinを使うと便利ですね。
この問題、サンプルケース全部OK出たから提出したら、ARCがARHに書き間違っててWAになったなんて言えない・・・
C問題
問題文
C問題にしては珍しく、問題文の通りにやっていけばACできる問題でしたね。
Qpi = i をループを回して順番に入れていけばいいですね。
ただ、注意点として、順列P、Qが1から始まっているのに対し、
リストで対応すると始まりが0になるのが厄介ですね。
ということで提出したコードを
見直したらfor文のiも0から始まってますね。
順列Qはappendでコード構築できる気がしなかったので0で初期化して、正解で置き換えていく方式でやりました。
あと、printでqが数値のリストの場合、 [1,2,3,4] みたいな感じで出力されて面倒くさかったです。
対策として、strにして
print("".join(str(q)),sep = " ")
でやるか、 *qでやればいいっぽいですね。
ただ、競プロだと、strに変換するとTLEが怖かったので、*qでやりました。
なのでstrの方は実行して無いので間違ってたらごめんなさい。
結果
目標であるC問題まで全部正解しました。
ただ、今回のC問題はめちゃくちゃ簡単だったらしく、Difficultyが49らしいです。
記事になって無いけど、前回のABCはめちゃくちゃ時間かけてB、C問題間違いまくってC問題まで解きました。そして前回の方がパフォーマンスが高かったので、自分は解くのが遅いのかぁ、、って感じました。
とりあえず今後もC問題まで過去問を埋めまくってコンテストいっぱい出ます。
それでは