情報妖精の競プロ日記

AtCoderの問題に対する方針を主に書きます

AtCoder Beginner Contest 112

AtCoder Beginner Contest 112 (ABC112) の解説です。
AtCoder Beginner Contest 112 旧版
AtCoder Beginner Contest 112 beta版

解けた問題だけ解説をしていきますー

要項

AtCoder Beginner Contest 112
rated 1200
10/6(土) 21:00 ~ 22:40 (100分)
100-200-300-400 (4問)
ペナルティ: 5分

方針

全完

A - Programming Education

やるだけなので、特にいうことはないです。

B - Time Limit Exceeded

求めるべきはt_i \leq Tを満たすc_iの中で最小のものなので、minを用いて求めれば良いです。

C - Pyramid

{\rm O}(N)で求めることは可能そうですが、面倒です。
今回はABCであることを加味して、簡単に{\rm O}(NXY) \leq 10000Nで解く方法を説明します。
まず、答えの座標(C_X, C_Y)を決め打ってしまいます。
この時、各(x_i, y_i)に対して、答えの高さはh_i=0ならばH \leq h_i + |C_X - x_i| + |C_Y - y_i|の範囲に、そうでないならばH = h_i + |C_X - x_i| + |C_Y - y_i|になります。
これを全ての座標に対して試し、矛盾なく一つの高さに定まったらそこを答えとすれば良いです。

D - Partition

まず、少なくとも一つのa_i\lfloor \frac{M}{N} \rfloor以下の大きさになるので、答えもそれ以下になります。
その中で最大の最大公約数とは何でしょうか?
まず、答えをxとしましょう。この時、全てのa_ixの倍数です。
つまり、Mxの倍数となるはずです。
言い換えれば、xMの約数の中で、最初に\lfloor \frac{M}{N} \rfloor以下になる値です。
ということは、約数を列挙して、その中で最初に\lfloor \frac{M}{N} \rfloor以下になる値を出力すれば良いことが分かります。
約数はi(1 \leq i \leq \sqrt{M})を用いてMiの倍数ならばi\frac{M}{i}が約数としていけば列挙できます。
最終的に計算量は{\rm O}(\sqrt{M})です。

結果

oooo 4完(1000点) 3:57-3:47-41:26(3WA)-79:16(2WA) / 104:16
493位

感想

うーん、C問題が思ったよりバグらせて辛かった。
何にせよ、まぁ久しぶりの初心者向けコンテストって感じになっていたかと思います。
これくらいの難易度だと易しくて良いね。