ツバサの備忘録

主に備忘録代わりに精進記録を載せていくつもりです。

ARC085 D - ABS

問題
提出コード

解法

シミュレーションをします。まず、前提として、どちらかはかならずa_nを最後にもっています。
次にXのターンだとします。
このとき、Xはa_nをとってゲームを終わらせることができます。このときの答えをpとしておきます(これは、現在のYの手札と、a_nの差の絶対値です)。 このターンにa_iを選んで手札にするとなると、次のターン相手はa_{i+1}以降を選ばなければなりません。
しかし、自分がa_iを選び、次のターン相手がa_jを選んだ時に、自分がa_iではなくa_nを選んだ場合の方がいい結果だった、ということを阻止しなければなりません。
なので、a_{i+1}以降で、a_nとの差の絶対値がpより小さいようなa_iは存在してはいけません。
これはYについても、大小関係を入れ替えて全く同じことが言えます。
なので、これらをシミュレーションしてターンを繰り返していけば、答えが求まります。
どちらかがa_{n-1}を選んだ時に、次の人がa_nを選んでゲームを終了する条件を書き忘れないようにしましょう。

と、このシミュレーションにはもう1段階続きが存在します。
実は、先ほどのa_iの選び方は、実は最初のXのターンの時点でa_{n-1}a_nを選ぶ2通りしか存在しません。なので、答えはO(1)で求めることができ、
 max(|w-a_n|,|a_n-a_{n-1}|)になります。
これで通したコードはこちらになります。