0.はじめに
大会予選なのでC問題までの難易度は普通でD以降がちょっと難しいとの事。
たしかにD難しいかもなーとあきらめてしまいました・・・。
Cもミスを繰り返しレートを落とす結果となってしまいました。
1.A - Contest Result
A問題なのにリスト2個読み!と
ビビりましたが、問題自体は簡単で
素直にBリストの解けた問題番号をもとに
その問題の配点をAリストから引っ張って足していくだけで
解けました。
https://atcoder.jp/contests/abc290/submissions/39012875
2.B - Qual B
ちょっとだけややこしい問題文でしたが
文字列Sの”o”の数を左からK個残し
あとの”o”は”x”に置き換えると考えると
すんなり解けました。
https://atcoder.jp/contests/abc290/submissions/39018612
3.C - Max MEX
昨日のARC156_B問題で悩んだMexが出てきました。(解けてないけど)
今日の問題は、単純になっていたので楽でした。
と、気軽に実装したら穴がありまくりでWA/REで3回再提出食らいました。
【考え方】
与えられたリストをソートして
先頭から、0があるか?1があるか?・・・・と比較していって
ない数があったらそれがMEX。
ただし、リストには重複する数もあるからそれは飛ばす。
【実装】
1)N,Kを読み込む
2)リストAを読み込む
3)リストAを昇順ソート
4)変数cnt(0から始め該当数がリストにあったら+1する)を0で初期化
5)変数ans(MEXの値を格納)を-1で初期化
6)変数i(リストAを見ていくときの位置を格納)を0で初期化
7)以下をcnt<kの間繰り返す
7-1)A[i]チェック
7-1-1)A[i]がcntと同じとき
7-1-1-1)cntに1を加算
7-1-1-2)ansにcntをセット(A[i]とcntが0だったら、1がMEX)
7-1-1-3)iに1を加算
7-1-2)A[i]がcnt以下の時(A[i]とA[i-1]が同じ数字の時)
7-1-2-1)iに1を加算
7-1-3)それ以外(A[i]がcntを超えている=穴が開いている=その数字がMEX)
7-1-3-1)cntにKをセット(ループを抜ける)
7-2)iがNと同じとき(リストを最後まで見た時)
7-2-1)cntにKをセット(ループを抜ける)
8)ansと0の大きい方を出力
(リストAの最小値が1以上だった場合等、ansが-1の時は0を出力)
7-2のリストを最後まで見たときの扱いや、8のansが-1の時の
扱いが抜けていたため、REやWAが出てしまってました。
https://atcoder.jp/contests/abc290/submissions/39029625
以上