情報妖精の競プロ日記

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

AtCoder Beginner Contest 110

AtCoder Beginner Contest 110 (ABC110) の解説です。
AtCoder Beginner Contest 110 旧版
AtCoder Beginner Contest 110 beta版

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

要項

AtCoder Beginner Contest 110
rated 1200
9/23(日) 21:00 ~ 22:40 (100分)
100-200-300-400 (4問)
ペナルティ: 5分

方針

全完

A - Maximize the Formula

この操作を検討すると、変数X, Y, ZについてZX+Yという形になります。
これは10Z+X+Yという形になるので、要するに一つだけ10倍してから総和するということになります。
当然、最も大きい数を10倍するべきなので、答えは最も大きい数を10倍してから全部足した値です。

B - 1 Dimensional World's Tale

まず、Xx_{N+1}Yy_{M+1}と考えても一般性を失いません。
この時、あるZについて任意のi, jにおいてx_i < Z \leq y_jが成り立てば良いことになります。
これはA=\max(x_i), B=\max(y_i)を用いてA < Z \leq Bと表せるので、後はA < Bかどうかさえ判定すればZ = Bにすれば成立します。

C - String Transformation

先に、条件を満たさない場合を考えます。
これは、あるi \neq jであってS_i = S_jかつT_i \neq T_jである時、またはその逆です。
これは、各アルファベットについてどれに対応させたかを覚えておき、矛盾が生じたらNoを返せば良いです。
矛盾が無ければYesです。

D - Factorization

M=\prod_{i=1}^{x} p_i^{e_i}とします。p_i素数とします。
つまり、M素因数分解する訳ですね。
その時、数列a_iに各素因数を割り当てるとこれは条件を満たします。
逆に、そうではない場合はこのような数列は条件を満たしません。
よって、まず先にa_i=1としておき、各素因数を割り当てるやり方が何通りあるか考えます。
まず、当たり前ですがi \neq jにおいてp_ip_jは互いに素ですから、独立して計算することができます。
次に、あるp_i^{e_i}について考えてみましょう。A^Bとして表します。
この時、B個のAN個の数列に割り振る組み合わせなので、重複組み合わせを用いて{}_NH_B={}_{N+B-1}C_{B}となります。
よって求める答えは\prod_{i=1}^{x} {N+B-1}C_{e_i}となります。
ここで、注意点としてどうやって{}_AC_Bを求めるかを考えましょう。
まず、今回素因数分解という性質からB \leq \log(M)となることが分かっています。
ということは、Bは高々30で抑えられるので、{\rm O}(B)で求めるアルゴリズムを用いると良いです。
この時の計算量{\rm O}(\sqrt{M} + (\log(M))^2)となります。
ただし、逆元を求めて計算すると計算量{\rm O}(\sqrt{M} + \log(M))となります。

結果

oooo 4完(1000点) 1:37-6:29-21:49-72:24 / 72:24
132位

感想

おいB問題、問題バグでWA出たぞふざけんな
結論: これはunratedですね……。