AtCoder Regular Contest 113のきろく
6問編成ARCで初めてDまで通ったのに...
- A - A*B*C (300点)
- B - A^B^C (400点)
- C - String Invasion (500点)
- D - Sky Reflector (600点)
- E - Rvom and Rsrev (800点): 未提出
- F - Social Distance (1000点、実行時間制限: 4 sec): 未提出
- 結果、感想
A - A*B*C (300点)
いきなり想定解と違う解法でした
自分が通した解法
となりますが、それぞれ正整数なので となります。 である について となる の組の個数は の正の約数の個数であるので、求める答えは となり、内側の和について、累積和をとってやることで、 で答えが求まります。
ここで約数函数 であり、 です。
想定解
を1つ固定させたとき となる は 個存在します。ここで の個数について を から まで和をとったところで *1となります。また、 の組を1つ固定させたとき の個数は でと、計算量 で出すことができます。よって となる の組を全て調べることで で答えが求まります。
B - A^B^C (400点)
の 進数での の位の値は、 の 進数での の位の値と によって決まります。それぞれの の剰余について $$\begin{align}
&0: 0 \rightarrow 0 \rightarrow \cdots
\\&1: 1 \rightarrow 1 \rightarrow \cdots
\\&2: 2 \rightarrow 4 \rightarrow 8 \rightarrow 6 \rightarrow 2 \rightarrow \cdots
\\&3: 3 \rightarrow 9 \rightarrow 7 \rightarrow 1 \rightarrow 3 \rightarrow \cdots
\\&4: 4 \rightarrow 6 \rightarrow 4 \rightarrow \cdots
\\&5: 5 \rightarrow 5 \rightarrow \cdots
\\&6: 6 \rightarrow 6 \rightarrow \cdots
\\&7: 7 \rightarrow 9 \rightarrow 3 \rightarrow 1 \rightarrow 7 \rightarrow \cdots
\\&8: 8 \rightarrow 4 \rightarrow 2 \rightarrow 6 \rightarrow 8 \rightarrow \cdots
\\&9: 9 \rightarrow 1 \rightarrow 9 \rightarrow \cdots
\end{align}$$ と、周期 (の約数)で の位が変化することが分かります。後は、 を で割った時の余りが分かれば の の位の数が求まります。ただし、余りが のときは であることに注意してください。 を で割った時の余りは同様に を で割った時の余りと の値によって決まります。それぞれ $$\begin{align}
&0: 0 \rightarrow 0 \rightarrow \cdots
\\&1: 1 \rightarrow 1 \rightarrow \cdots
\\&2: 2 \rightarrow 0 \rightarrow 0 \rightarrow \cdots
\\&3: 3 \rightarrow 1 \rightarrow 3 \cdots
\end{align}$$ となっていて、特殊な の時を除けば、周期 (の約数)で変化することが分かります。 のときは で余り 、そうでないときは余り となります。
さてこれらの周期は実はEulerの定理やCarmichaelの定理を拡張したものから求まります。これらについてはこちらの記事を参照してください。
C - String Invasion (500点)
毎回操作を可能な限り後ろで行うことで最善手となります。このとき、同じ文字が2文字以上連続するブロックについて、後ろからそれらが見つかるたびにそれより後ろの文字を全てそのブロックの文字に置き換える状態となります。
このとき各操作回数について考えます。当のブロックを 、 の次のブロックを とします。 と の文字が同じときは、 に達した時は 以降は全て と同じ文字になっているため、この時の操作回数は と の間にある と異なる文字である位置の数なります。 と の文字が違う時や、 が存在しないときは に達した時は、それより後に と同じ文字からなるブロックは存在しないため、それより後ろにある文字数から と の間にある と同じ文字である位置の数を引いたものとなります。
求める答えはこれらを合計したものです。この貪欲法が正しいことの証明については公式解説を参照してください。
D - Sky Reflector (600点)
マス に書かれた数を とします。
$N = 1$のとき
となり、 となるため、 通りとなります。
$M = 1$のとき
となり、 となるため、 通りとなります。
上のどちらでもないとき
の時列対 を満たす書き込み方が存在します。そうでないときはそのような書き込み方は存在しないです。以下にこれらについて証明を述べます。
$A_i \gt B_j$となるような $(i,\,j)$ の組が存在するとき
このような を とします。つまり です。
このとき は 行目の最小値であるため、 となります。
は 列目の最大値であるため、 となります。
これらから となりますが、 に反し、矛盾します。背理法からこのような場合がありえないことが示せました。
$\displaystyle\max_i A_i \leq \min_j B_j$ が満たされるとき
となる書き込み方を考えます。
行目に含まれる数は と となり、その最小値は となります。
列目に含まれる数は と となり、その最大値は となります。
よって、具体的に書き込み方を構成することができました。
さて、このような列対 の個数ですが、次のように計算できます。
とします。このとき については最大値となる場所とその他の数により
これら 乗や 乗は繰り返し二乗法で や で計算できるため、全体として で計算できます。
E - Rvom and Rsrev (800点): 未提出
問題名は'Remove and Reverse'のそれぞれ色を付けたところの文字を選んで問題文中の操作を施したものになっていますね。
色々考えてるときに辞書順比較と数字の大小比較について対応関係があることなどが思い浮かんだりしましたが、何も役には立ちませんでした。
現段階でも分かっておりません。
F - Social Distance (1000点、実行時間制限: 4 sec): 未提出
分からないです...
そもそも有理数をmodで答える問題が解けたためしがないです...
結果、感想
Dまでの速解き勝負だったこともあって、BCではまってなかなか抜け出せなかったのが痛かったなと思います。3連続で冷えてるので次こそ挽回したいです。