atcoder#AGC023D. [AGC023D] Go Home

[AGC023D] Go Home

配点 : 12001200

問題文

NN 棟のマンションが数直線上に並んでおり、11 から NN までの番号がついています。 マンション ii は座標 XiX_i の位置にあります。 また、AtCoder 社は座標 SS の位置にあります。 AtCoder 社の社員は皆、NN 棟のうちいずれかのマンションに住んでいます。 マンション ii に住んでいる社員の人数は PiP_i です。

いま、AtCoder 社の社員全員が、一斉に帰宅しようとしています。 彼らは仕事で疲れているため、AtCoder 社の所有するバスでの帰宅を望んでいます。 AtCoder 社の所有するバスは 11 台しかありませんが、社員全員を乗せることができます。 このバスは、社員全員を乗せて座標 SS から出発し、次のようなルールで動きます。

  • バスに乗っている全員(このバスは自動運転であり、運転手はいないものとする)で、正の方向へ進むか負の方向へ進むかの投票を行う。 各社員 11 票ずつ投票し、棄権は許されない。 その後、得票数の多い方向へ、距離 11 だけ移動する。 なお、得票数が同じ場合は、負の方向へ移動する。 もし移動した後の座標にマンションがあるなら、そこに住む社員全員が降りる。
  • バスに社員が乗っている限り、上の操作を繰り返す。

具体例については、入出力例 11 の説明を参照してください。

バスは、距離 11 進むのにちょうど 11 秒かかります。 また、投票や降車にかかる時間は無視できます。

AtCoder 社の社員は全員、自分がバスを降りるまでの時間を最小化するように投票します。 厳密にいうと、ある投票の際には、各社員は、バスがどちらに動いたとき自分の帰宅が早いか (社員全員が今後同じ戦略に従うとして) 考えます。 各社員は、この情報をもとに最適な選択を行いますが、バスがどちらの方向に動いても帰宅までの時間が変わらないときは、負の方向へ投票します。

この時、バスが AtCoder 社を出発してから、最後に社員がバスを降りるまでにかかる時間が何秒かを求めてください。 なお、マンションの位置、住人の数、バスの位置が与えられたとき、バスがどのように動くかは一意に定まることが証明できます。 また、有限時間にすべての社員が帰宅することも証明できます。

制約

  • 1N1051 \leq N \leq 10^5
  • 1S1091 \leq S \leq 10^9
  • 1X1<X2<...<XN1091 \leq X_1 < X_2 < ... < X_N \leq 10^9
  • XiSX_i \neq S ( 1iN1 \leq i \leq N )
  • 1Pi1091 \leq P_i \leq 10^9 ( 1iN1 \leq i \leq N )
  • 入力はすべて整数である。

入力

入力は以下の形式で標準入力から与えられる。

NN SS

X1X_1 P1P_1

X2X_2 P2P_2

::

XNX_N PNP_N

出力

バスが出発してから最後に社員がバスを降りるまでにかかる時間が何秒かを出力せよ。

3 2
1 3
3 4
4 2
4

最初にバスが負の方向へ動いたとしましょう。 すると、バスの座標は 212 \to 1 と変化し、マンション 11 の住人が降車します。 その後のバスの動きは明らかで、正の方向へ移動し続けます。 よって、最初にバスが負の方向へ動く場合は、出発してからバスの座標は 212342 \to 1 \to 2 \to 3 \to 4 と変化することになり、 マンション 11, 22, 33 の住人の帰宅までの時間はそれぞれ、11 秒, 33 秒, 44 秒となります。

次に、最初にバスが正の方向へ動いたとしましょう。 すると、バスの座標は 232 \to 3 と変化し、マンション 22 の住人が降車します。 その後バスは、マンション 11 へ向かって移動し始めます。 なぜなら、マンション 11 の住人がマンション 33 の住人より多いからです。 そして、バスはマンション 11 についた後、マンション 33 へ向かいます。 よって、最初にバスが正の方向へ動く場合は、出発してからバスの座標は 23212342 \to 3 \to 2 \to 1 \to 2 \to 3 \to 4 と変化することになり、 マンション 11, 22, 33 の住人の帰宅までの時間はそれぞれ、33 秒, 11 秒, 66 秒となります。

以上より、マンション 11, 33 の住人は、最初にバスを負の方向へ動かそうとします。 逆に、マンション 22 の住人は、最初にバスを正の方向へ動かそうとします。 マンション 11, 33 の住人の数を合わせると 3+2=53 + 2 = 5 人となり、マンション 22 の住人の数 44 人より多いです。 よって、最初にバスは負の方向へ動き、出発してからバスの座標は 212342 \to 1 \to 2 \to 3 \to 4 と変化することになります。

6 4
1 10
2 1000
3 100000
5 1000000
6 10000
7 100
21

それぞれのマンションに住む人数が文字通り桁違いなので、バスは常に、バスに乗っている住人の数が最も多いマンションへと向かいます。

15 409904902
94198000 15017
117995501 7656764
275583856 313263626
284496300 356635175
324233841 607
360631781 148
472103717 5224
497641071 34695
522945827 816241
554305668 32
623788284 22832
667409501 124410641
876731548 12078
904557302 291749534
918215789 5
2397671583