Toy と帽子と ADP BE

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

AtCoder Beginner Contest 151

5完2WA。Eがスパッと解けたのがとても気持ちよかったです。しかし、あいかわらず幾何で爆死・・・。

各問題

A - Next Alphabet

言語にもよるかもしれませんけど、C + 1を文字型として出力すればOKですね。zが入力に与えられないのが良心的です。

B - Achieve the Goal

考えるのが面倒だったので、Aを全部足した後、0からKまでループで回して、平均値がMになった瞬間の得点を出力、としました。

Submission #9445488 - AtCoder Beginner Contest 151

もちろんループを回さずとも答えは簡単な計算で出るのですが、この問題に限っていえばO(KM)でも計算量にまったく問題がないので、計算で求めるほうが条件分岐が増えて微妙にバグらせやすい、かも?(答えが負になったときとKを超えた時の両方を考慮する必要があるので)

C - Welcome to AtCoder

まず、各問題についてACが出たかどうかと、WAがいくつ出たかを保存する配列を用意します。

最初の提出から順に、ACが出たかどうかを確認しつつ、まだACが出ていない問題についてWAが出ればその回数を加算していきます。

次に、ACが何問で出たかを数えます。

最後に「ACが出ている問題に対して」WAがいくつ出たかを数えます。

私は「ACが出ている問題に対して」をすっとばしてWAを集計してしまい、WAを一つ出してしまいました。ああ・・・。

D - Maze Master

スタート地点を全探索 -> 全探索(BFS)でスタート地点からの距離を計測 -> 距離の最大値が答え

私は最初これに気づかず、ゴール地点も全探索してTLEをもらってしまいました。20^6なら大丈夫だと思ったんです・・・。

(追記)

やっぱり20^6なら実装によっては間に合うらしいです。自分のBFSの書き方がまずいのだろうか・・・。

E - Max-Min Sums

これは、各数字が何回min (or max)として使用されるかを数えればいいです。

まずAの列をソートし、小さい方から考えます。

A1がminとして使用される回数は、A2からANまでのN-1個からK-1個を選ぶ回数です。

A2がminとして使用される回数は、A3からANまでのN-2個からK-1個を選ぶ回数です。

一般化して、Amがminとして使用される回数は、Am - 1からANまでのN-m個からK-1個を選ぶ回数です。

maxについても同様に、大きい方から見ていけばよいです。

あとは求めた回数とAを掛けて、集計して、maxの合計からminの合計を引けば答えです。

F - Enclose All

二分法を使えばいいのはすぐにわかって、あとは幾何問題なのですが、その幾何問題が解けず。on_

二点間の距離が「求めたい半径*2」以下になるか、で判定しようとしたんですけど、間違ってますかそうですか・・・。

まとめ

幾何があれなのは今のところ仕方ないので、まあ今日は実力通りの結果でした。いや、今日のEがすぐに見えたのは実力以上かも。

あとは不要なWAを減らしていければ・・・。

ともあれ、2日連続のHighest更新となりました。

f:id:mdstoy:20200112231517p:plain