Codeforces Round #701 (Div. 2)のきろく
久しぶりにCodeforcesに出ました。できればD問題通したかったな。
問題文和訳はこちら
- A. Add and Divide (500点、実行時間制限: 1 sec)
- B. Replace and Keep Sorted (1000点)
- C. Digital Graffiti (1500点)
- D. Multiples and Power Differences (1750点)
- E. Move and Swap (2500点): 未提出
- F. Copy or Prefix Sum (3000点): 未提出
- 結果、感想
A. Add and Divide (500点、実行時間制限: 1 sec)
より であるので、途中で を増やす操作を挟むとき、操作列の長さを長くすることなくこの操作を最初に移すことができます。
さて、 の値を決めたとき を にする操作の回数ですが、 のときは なので何回やっても にすることはできないですが、 のときは であるため、 回以内で にすることができます。 の値を増やすと、割り算の回数が減るのでそれに従って操作回数を更新していきます。 の値を大きくしすぎると最初の足し算の回数が増え、全体の操作回数が多くなってしまうので、適当な大きさまでで更新を止めます。割り算の回数は高々30回なので、初期値よりも30大きな値までで十分です。
B. Replace and Keep Sorted (1000点)
は の部分列 から値を1つだけ変えた配列です。
自分の解法
番目の要素を変えるとする、即ち、 のとき で のとき とします。 も も狭義単調増加整数列であることから によって場合分けができます。
- (区間の左端)のとき、 は から までの正整数のうち ではない 個の整数をとることができます。
- (区間の端でない場合)のとき、 は から までの正整数のうち ではない 個の整数をとることができます。
- (区間の右端)のとき、 は から までの正整数のうち ではない 個の整数をとることができます。
以上より、これらは同時には起こりえないので求める答えは $$\begin{align}
(a_{l + 1} - 2) &+ \sum_{c = 2}^{r - l}\, (a_{l + c} - a_{l + c - 2} - 2) + (k - a_{r - 1} - 1) \\
&= k + (a_r - a_l + 1) - 2(r - l + 1)
\end{align} $$ となります*1。私はコンテスト中はシグマの中身を計算せず累積和で通してます。
解説の解法
いずれかの要素を にしたときに何個の -類似列ができるか、という考え方です。
- のとき、 を に置き換えることで つの -類似列ができます。
- のとき、 を に置き換えることで つの -類似列ができます。
- のとき、 がいずれかの と等しい場合 -類似列はできないですが、そうでないなら として、 か を に置き換えることで つの -類似列ができます。このような は から までの整数のうち に含まれない整数であるので、 個あります。
以上より、これらは同時には起こりえないので求める答えは $$ \begin{align}
(a_l - 1) & + 2[(a_r - a_l +1) - (r - l + 1)] + (k - a_r) \\
& = k + (a_r - a_l + 1) - 2(r - l + 1)
\end{align} $$ と同じ式が導出できます。
C. Digital Graffiti (1500点)
自分の解法
とすると より であり、 と より を固定したときの特別な組の個数は の個数であり となり、 から まで和をとれば答えとなりますが、そのままだとTLEしてしまいます。
となるのは のときであり、その範囲では を足していきます。
のときは として各 の値について の数を数えます。
$$ \begin{align}
\left\lfloor \frac{x}{1+b} \right\rfloor = k & \Longleftrightarrow \frac{x}{1+b} - 1 \lt k \leq \frac{x}{1+b}
\\ &\Longleftrightarrow \frac{x}{k+1} - 1 \lt b \leq \frac{x}{k} - 1
\end{align}$$ となるのでこれらを から の範囲で足していくことで答えが求まります。
D. Multiples and Power Differences (1750点)
コンテスト中には解けませんでした... ちょっと考えれば解ける問題だったので勿体ない...
を から までの公倍数の1つとして $$b_{i,j}=\left\{
\begin{array}{ll}
l & (i + j\text{ は奇数})\\
l + {a_{i,j}}^4 & (\text{otherwise})
\end{array}
\right.$$ とすれば*2と下2つの条件を満たすことができます。 としては が思いつくもしれませんが で の条件を満たしません。しかし、最小公倍数 なら条件を満たすことができます。
E. Move and Swap (2500点): 未提出
解けてないです...
F. Copy or Prefix Sum (3000点): 未提出
解けてないです...
結果、感想
久しぶりすぎてA問題からこんなんやっけって感じになってます。次のRound(not Educational)では4完したいな。