Toy と帽子と ADP BE

主にプログラミングに関わる話をゆるくエモくやっていきます

AtCoder Beginner Contest 136

4完1WA。Eの解法はわかったのに最後まで不具合がなくならないという情けない結末。

各問題

A - Transfer

問題文よりC - (A - B)が答え、としませんでしたか?私はしました。on_

これはC < A - Bのケースが考慮されていませんのでWAです。この場合は容器2が空になるため答えは0にしなければなりません。ああ・・・。

しかも入力例3がまさにこのケースだという。いつもは必ず全サンプルを確認するのに、ちょっと手抜いたとたんにこの有様ですよ。

B - Uneven Numbers

editorialの解法がえげつないですな・・・。

私は場合分けして解きました。見てもらったほうが早いと思うので、提出コードだけ貼っておきます。

https://atcoder.jp/contests/abc136/submissions/6687434

C - Build Stairs

右から見るのが確実かと思います。左を見て、同じかそれ以下ならそのまま左に移ります。左が1つ高ければそれを一つ下げてから移ります。左が2つ以上高ければ、下げようがないので"No"です。

左端まで無事遷移できれば"Yes"です。

D - Gathering Children

まず、

  • 子供はRLとなっているところに集まってきます
    • 移動回数が10100とべらぼうに多いので、最終的にすべての子供がRLの位置で左右移動を繰り返すことになると考えてよいです
  • LRとなっているところで区切ることができます
    • Lより右にはいけませんし、Rより左にもいけません

なので、例えばRRRLLLRRLLの場合、最初のRLの部分に6人の子供が、次のRLの部分に4人の子供が来ることになります。

で、RとLのどちらに落ち着くかは、移動回数が偶数であることから容易にわかります。

E - Max GCD

考察でわかったこと(求めたい値をXとする)

  • 操作によってすべての要素の和は変わらない
  • 操作後のすべての要素を割り切る値Xがある場合、すべての要素の和はXの倍数になる
    • 上記より、Xはすべての要素の和の約数
      • 制約がN<=500,A<=106なので、すべての要素の和はそんなに大きくならない
      • そもそもある数の約数の総数はそんなに大きくならない
        • 約数をすべて列挙して総当りできそう
  • ある数に対しての操作の回数はA mod Xを引くか、X-(A mod X)を足すかどちらか
    • modを計算して、ソートして、あるところまで引いてあるところから足す、をやって、引いた分と足した分とが相殺できればおっけーなのでは?
      • この足し引きについては累積和の利用で計算量は問題なさそう

editorialを見てもこれで合ってるっぽいのですが(ほんまか?)、実装にバグがあったらしくいつまで経ってもサンプルが通せないままタイムアップとなりました。情けない・・・。

(追記)

F - Enclosed Points

チラ見しただけ。

まとめ

何度も反省しているような気がしますが、相変わらず落ち着きがたりません。ていうか、考察より実装力がネックになってるのは正直不本意・・・。

レートは微増で、次回こそ真・昇級戦です。(いつまで昇級戦やるの?) まあ最近のパフォで安定していれば、焦らずともあと2回ほどで昇級できる見込みなんですけどね。

f:id:mdstoy:20190804234534p:plain