ABC157

ABC157に参加しました。前回は所用で不参加でしたので、二週間ぶりのコンテストになりました。

自分的には納得のいかない出来でしたが、パフォーマンスは初めての緑で、不完全燃焼感が少しありました。一応は三完で、Dも解けそうでしたが、時間がありませんでした。Dを解説を見ながら解いてみようとも思ったんですが、先に典型的なグラフをいくつか解いてからのほうがよさそうだったので、今回はA~Cまでの三問についてだけ書いておきます。

 

A - Duplex Printing

2で割った後に奇数ページの場合は1枚足してやる必要があります。

(n+1)/2とすることで偶奇を気にすることなく(場合分けをする必要なく)答えを出すことができます。(偶数の場合あまりは切り捨てのため)

Submission #10429538 - AtCoder Beginner Contest 157

 

B - Bingo

これしんどくないですか?見た瞬間に、解けはするけど時間はかかるだろうし今回はダメっぽいと思いました。

二次元配列に数字を受け取ります。数字が入力されるたびに全部のマスをチェックして、同じ数字があれば0に書き換えました。最後に0が三つ並んでビンゴになっているかどうかを調べます。縦と横は二重for文でiとjを入れ替えて調べれば一回の二重for文で終わります。斜めだけはうまくやる方法が思いつかなかったのでそれぞれ三つずつ0かどうかを判定しました。これBなのか?と思いながらやりましたが、ほかの方の感想でも実装が重いと言われていたので、自分の感覚がおかしいわけではないようで安心しました。

Submission #10439530 - AtCoder Beginner Contest 157

 

C - Guess The Number

これしんどくないですか?(二回目)なんとなく分かった気になって一回WAを出してしまいました。

int型でnを受け取り、配列でm個の処理を受け取りました。int型でもstring型でも数字の書き換えが面倒だとおもったので、int型で10で初期化した要素数nの配列を用意して、答えを入れておくことにしました。bool型のフラグを用意しておいて、10になっている桁に数字の指定があれば書き換え、10以下に書き換えられている桁に新たに数字の指定があった場合、同じ数字でなければフラグをfalseに書き換えました。最後に10のままになっている桁で、左から一番目の桁を1、それ以外の桁は0に書き換えて出力したところ(真下のリンクのコード)、最後のテストケースでWAとなりました。

Submission #10452259 - AtCoder Beginner Contest 157

色々考えたところ、1桁で一度もクエリがない場合、配列が10のままで、最後に1に書き換えられていることに気が付きました。0は1桁の整数とすると定められているので、この場合は0として出力するように書き換えました。

Submission #10457088 - AtCoder Beginner Contest 157

 

今回は以上です。

CでWAを出さずに一発で通すことはできたと思うので悔しかったです。D以降についても知っている知識が増えてきたので前々回のように通せる頻度を高めていきたいです。