AtCoder Regular Contest 116のきろく
AtCoder Regular Contest 116でレート微増しました
- A - Odd vs Even (300点)
- B - Products of Min-Max (400点)
- C - Multiple Sequences (500点)
- D - I Wanna Win The Game (600点)
- E - Spread of Information (800点、実行時間制限: 3 sec): 未提出
- F - Deque Game (800点): 未提出
- 結果、感想
A - Odd vs Even (300点)
の素因数 の重複度(-進付値)を とし、 の約数で -進付値が であるような数の集合を とします。このとき について であり、 について です。
これらより の正の奇数の約数の個数は であり、正の偶数の約数の個数は であるので、 のときは正の奇数の約数の方が多く、 のときは両者の数は等しく、 のときは正の偶数の約数の方が多くなります。
B - Products of Min-Max (400点)
をソートすると の値は選んだ最大のインデックスと最小のインデックスで決まることになります。
最大のインデックスが 最小のインデックスが である選び方について考えます。このとき より です。 のときはこのような選び方は 通りです。 のとき であり、このような選び方は の 個のインデックスをそれぞれ選ぶかどうかの 通りであるので、答えは となります。
括弧の中の については であるので累積和のような要領で 求めていくことができ、全体で で解くことができます。
公式解説 では上記の最大と最小を逆にした考えで答えを求めているようです。
C - Multiple Sequences (500点)
最初は の値で場合分けをしようとして時間を食ってしまいました。左側から倍数を考えていくのは数が多く、かつ という条件を満たすと考えるのは非常に困難です。
今回は重複組み合わせ を用います。これは 種類のものから重複を許して 個を選ぶ組み合わせの数で高校の数学Aでやるように となります。丸と仕切りを並べるやつです。
の値を固定したとき の選び方についてみていきます。 の各素因数 について重複度を とすると の素因数 の重複度は 以上 以下の広義単調増加整数列となります。よって での素因数 の重複度との差を とすると重複度が増える箇所を 箇所の中から重複を許して 箇所選んだ時の場合の数となり(重複するときその箇所で 以上増加)、その場合の数は となります。これは各素因数ごとに独立です。よって、整数 について素因数 の重複度を とすると 答えは となります。素因数も重複度も高々 であるので、組み合わせが高速に求まるように前計算しておくことで で求めることができます。
また の部分は次の2通りの考え方で高速化することができます。
0個目を考える
便宜上 というものを最初に追加することで 重複度が増える箇所を 箇所の中から重複を許して 箇所選んだ時の場合の数に帰着することができるので となります。
D - I Wanna Win The Game (600点)
3つ目の条件 と1つ目の条件 より二進法での桁DPを考えます。2つ目の条件 より各 の桁数は の桁数以下であるので*1、 桁だけ考えればいいことが分かります。 なので ですね。また、3つ目の条件より各桁について のその桁が となるような は偶数個でなければならないことが分かります。
$$ {\mathrm{dp}}_{i,j} = (\text{下から \(i\) 桁を 3 つ目の条件を満たすように決めたときの和が \(j\) となる場合の数}) $$ とし、このとき
であり、 について$$ {\mathrm{dp}}_{i,j} = \sum_{k=0}^{\min\left\{ \left\lfloor \frac{N}{2} \right\rfloor ,\, \left\lfloor \frac{j}{2^i} \right\rfloor\right\}} {}_N \mathrm{C}_{2K}\, {\mathrm{dp}}_{i,j - 2k 2^{i-1}} = \sum_{k=0}^{\min\left\{ \left\lfloor \frac{N}{2} \right\rfloor ,\, \left\lfloor \frac{j}{2^i} \right\rfloor\right\}} {}_N \mathrm{C}_{2K}\, {\mathrm{dp}}_{i,j - 2^i k} $$ となります。 総和の上限が少し複雑ですが、これは「配るDP」で書くことによって上限について考えずにコードを組むことができます。E - Spread of Information (800点、実行時間制限: 3 sec): 未提出
グラフは木となるので葉から...みたいに考えましたが分かりませんでした...
F - Deque Game (800点): 未提出
ゲーム問題苦手...
結果、感想
C問題で前計算の数が少なすぎて3WA出してしまい、それに思い至るまでに時間を食ってしまいました... D問題でも上の桁から考えていたのでそれで考えが少し複雑になってしまい、バグ取りに時間がとられてしまいました。もっと早く通せていれば黄色パフォだったかも...
*1:3つ目の条件より「以下」の部分は「未満」、すなわち同じになることがないことは分かりますが別にそこまで考える必要はないです