geam1113’s diary

主にAtcoderのコンテストの備忘録を書きます。AtCoder緑と水色を行ったり来たりしています。

ABC234 参加記録

C - Happy New Year!

非負整数xの2進数表記の1を2に変換する操作を考えます。操作後の値をf(x)とします。すると、以下が言えます。

  • xf(x)は一対一対応する。
  • 非負整数の変換によって、0,2のみからなる整数の全てを得られる。
  • x \lt yならf(x) \lt f(y)である。

以上から、Kの2進数表記の1を2にすると答えを得られます。
提出コード

D - Prefix K-th Max

ウェーブレット行列が使えます。
ウェーブレット行列では、以下の関数がO(logP_{max})で使えます。(P_{max}Pの要素の最大値で、今回はN)

  • quantile(s,e,r):半開区間[s,e)r+1番目に小さい値を返す。

Pを0-indexedとすれば、K \leq i \leq Nについて、quantile(0,i,K-i)で答えが計算できます。

計算量は、Pのウェーブレット行列の構築がボトルネックとなり、O(NlogP_{max})です。
提出コード

E - Arithmetic Number

整数Xの桁数をdとします。
候補となる等差数Yの制約を考えてみます。

  1. 桁数id\leq i \leq d+1
  2. 公差j -9 \leq j \leq 9
  3. 最上位桁kは、 1 \leq k \leq 9

更に、実際にYを構築する時に、i回の計算が必要になります。
ワーストケースのおおよその計算量は、
 2 \times 19 \times 9 \times 18 = 6156となり、十分に小さいので、全探索可能です。

Yの各桁の計算の過程で、桁の数tt \geq 10またはt \lt 0とならないものだけを答えの候補とします。その中で、Y \geq Xを満たすもののうち、最小のYが答えです。

なお、条件1はd+1桁の整数について、必ずゾロ目が含まれ、これは公差0の等差数になることより導けます。
提出コード