trsing’s diary

勉強、読んだ本、仕事で調べたこととかのメモ。

AtCoder Beginner Contest 134参加メモ

結果

A,B,CはAC。D,Eは後程AC。パフォーマンス300!ほげー

A - Dodecagon

式にぽいっとするだけですね。3 * r * r。

B - Golden Apple

監視員が見れる範囲が2D+1なのでこれをNで割る。補正(切り上げ)が必要。解説のやり方覚えておきたいですね。

C - Exception Handling

これどこかで見たやつに似ている…(ABC125のC問題)。というわけでl_{2}=\max(A1,A2),\, l_{3}=\max(l_{2},A_{3}),\,\cdots,l_{N-2}=\max(l_{N-3},A_{N-2})r_{2}=\max(A_{N},A_{N-1}),\,r_{3}=\max(l_{2},A_{N-3}),\,\cdots,r_{N-2}=\max(l_{N-3},A_{2})を求めておいてAiを抜いた時は\max(l_{i-1},r_{N-1-i})。とやりました。解説の方針2と同じ。方針1の方がはるかに楽でしたね。

f:id:trsing:20190721125627p:plain

余談

WAでたけど放置してDに取り掛かっていました。結局ACしたのはDも行き詰った1時間後…。ほげー

D - Preparing Boxes

とりあえず真正面から考えると、i=1の時は全部の箱、i=2の時は2,4,6,…の箱、i=3の時は3,6,9,…の箱、i=N/2の時はN/2,Nの箱、i=N/2+1の時はN/2+1の箱…i=Nの時はNの箱を参照となります。つまりi=N/2+1以降は自分の箱しか関係しないためa_{i}に従えば良いということがわかります。

i=N/2のときはNの箱が確定しているからN/2の箱はa_{N/2}のつじつまが合うように決めます。以下同様。他の箱の状態がどうなっていても自分の箱でつじつまを合わせることができるので「いいボールの入れ方」が必ず存在します。

f:id:trsing:20190721125754p:plain

早い話Nから決めていくだけです。

余談

if (1 == v[i])//ボール入を入れた
    Write($"{Ai[i]} ");

お分かりいただけただろうか?*1 コンテスト終わってから気づきました。

E - Sequence Decomposing

寝て起きたら(以下略。勘があってただけというものですが。

  1. 色ごとに最大値を保存する(col_{i})
  2. A_{i}が色ごとの最小値以下(\min(col) \geq A_{i})であれば色を追加する(col.Add(A_{i}))
  3. A_{i}が色ごとの最小値より大きければ(A_{i} \gt \min(col) )A_{i}未満の最大値を更新する(j=\max(col) where A_{i} \gt col_{j},\, col_{j}=A_{i})

この方法で使用した色の数が最小となります。 何通りか試してみてそれっぽかったしACもとれてるから正しいと思うけど理屈はわかってない。

f:id:trsing:20190721125652p:plainf:id:trsing:20190721125702p:plain f:id:trsing:20190721125722p:plain

この方法だと色ごとの最大値が常に降順になりますので3.では二分探索を使いました。同じ値複数がある場合、右端を返すように小細工してます。

F

そのうちやる。

所感

問題Dは方針決めるより問題文理解するほうに時間がかかったし、出力すべきものは間違うしとさんざんでしたね…。日本語頑張ろっか…。

*1:出力すべきなのはAiではなくi