atcoder#ABC305H. [ABC305Ex] Shojin

[ABC305Ex] Shojin

配点 : 650650

問題文

あなたは 精進 をすることにしました。精進とは、AtCoder の問題を大量に解くことをいいます。 精進は何日か掛けて行われます。1 日における精進は次の手順で行われます。

  • その日に MM 問の問題を解くとする。各問題には非負整数対 (A,B)(A, B)難易度 と呼ばれる値としてついている。
  • まず、MM 問を自由な順番に並べ替える。そして、並び替えた後の順に問題を 1 問ずつ解いていく。
  • あなたは 疲労度 という値を持っている。1 日のはじめの疲労度は 00 であり、難易度が (A,B)(A, B) である問題を解くごとに疲労度が xx から Ax+BAx + B に変化する。
  • MM 問すべて解いた時点での疲労度を、その日の 消費した体力 と呼ぶ。

NN 問の AtCoder の問題が並んでいて、順に問題 11, 問題 22, \dots, 問題 NN と呼びます。問題 ii の難易度は (Ai,Bi)(A_i, B_i) です。 あなたは精進を行うことで NN 問の問題を全て解くことにしました。 精進は次の手順で行います。以下では問題 LL, 問題 L+1L+1, ......, 問題 RR からなる問題の列を [L,R][L, R] と呼びます。

  • 11 以上 NN 以下の整数 KK を自由に選ぶ。精進する日数を KK 日とする。
  • NN 問の問題の列を、KK 個の非空な連続部分列に分割して、前から ii 番目の列を SiS_i とする。
    形式的に説明すると、狭義単調増加な非負整数列 x0,x1,,xKx_0, x_1, \dots, x_K のうち 1=x01 = x_0 かつ xK=N+1x_K = N + 1 を満たすものを 1 つ選び、1iK1 \leq i \leq K について Si=[xi1,xi1]S_i = [x_{i-1}, x_i - 1] とする。
  • そして、i=1,2,,Ki=1, 2, \dots, K について、 ii 日目の精進では SiS_i に含まれる問題全てを解く。

あなたは、精進全体での消費した体力の総和が XX 以下になるように精進をすることにしました。 このような精進の日数 KK として取り得る最小の値を DD とします。(ここで XX について、i=1NBiX\sum_{i = 1}^N B_i \leq X が保証されています。この制約下において条件を満たす DD は必ず存在します。) また、K=DK=D である精進において、精進全体での消費した体力の総和として取り得る最小の値を MM とします。

DD および MM を求めてください。

制約

  • 1N2×1051 \leq N \leq 2 \times 10^5
  • 1X1081 \leq X \leq 10^8
  • 1Ai1051 \leq A_i \leq 10^5
  • 1Bi1 \leq B_i
  • i=1NBiX\sum_{i=1}^N B_i \leq X
  • 入力される値は全て整数

入力

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

NN XX

A1A_1 B1B_1

A2A_2 B2B_2

\vdots

ANA_N BNB_N

出力

DD および MM を空白区切りで出力せよ。

3 100
2 2
3 4
5 7
1 52

このテストケースでは XX に関する条件を満たしながら 11 日で全ての問題を解くことが可能です。 以下の手順で精進を行うことで、精進全体での消費した体力は 5252 になり、これが最小です。

  • K=1K=1 として、11 日目に [1,3][1, 3] を解くとする。
  • 11 日目の精進は以下の手順で行う。- 問題を (問題 33, 問題 22, 問題 11) の順に並べる。
    • はじめ、疲労度は 00 である。
    • 問題 33 を解く。疲労度は 5×0+7=75 \times 0 + 7 = 7 に変化する。
    • 問題 22 を解く。疲労度は 3×7+4=253 \times 7 + 4 = 25 に変化する。
    • 問題 11 を解く。疲労度は 2×25+2=522 \times 25 + 2 = 52 に変化する。
    • 全ての問題を解いた時点での疲労度は 5252 である。よってこの日の消費した体力は 5252 となる。
  • 問題を (問題 33, 問題 22, 問題 11) の順に並べる。
  • はじめ、疲労度は 00 である。
  • 問題 33 を解く。疲労度は 5×0+7=75 \times 0 + 7 = 7 に変化する。
  • 問題 22 を解く。疲労度は 3×7+4=253 \times 7 + 4 = 25 に変化する。
  • 問題 11 を解く。疲労度は 2×25+2=522 \times 25 + 2 = 52 に変化する。
  • 全ての問題を解いた時点での疲労度は 5252 である。よってこの日の消費した体力は 5252 となる。
  • 精進全体での消費した体力の総和もまた 5252 である。
3 30
2 2
3 4
5 7
2 17

このテストケースは、1 番目のテストケースの XX100100 から 3030 に変えたものです。よって、 XX に関する条件を満たしながら 11 日で全ての問題を解くことは不可能です。

以下の手順に従って精進を 22 日間行うことで M=17M=17 を達成できます。

  • K=2K = 2 として、11 日目に [1,2][1, 2], 22 日目に [3,3][3, 3] を解くとする。
  • 11 日目の精進は以下の手順で行う。- 問題を (問題 11, 問題 22) の順に並べる。
    • はじめ、疲労度は 00 である。
    • 問題 11 を解く。疲労度は 2×0+2=22 \times 0 + 2 = 2 に変化する。
    • 問題 22 を解く。疲労度は 3×2+4=103 \times 2 + 4 = 10 に変化する。
    • 全ての問題を解いた時点での疲労度は 1010 である。よって 11 日目の消費した体力は 1010 となる。
  • 問題を (問題 11, 問題 22) の順に並べる。
  • はじめ、疲労度は 00 である。
  • 問題 11 を解く。疲労度は 2×0+2=22 \times 0 + 2 = 2 に変化する。
  • 問題 22 を解く。疲労度は 3×2+4=103 \times 2 + 4 = 10 に変化する。
  • 全ての問題を解いた時点での疲労度は 1010 である。よって 11 日目の消費した体力は 1010 となる。
  • 22 日目の精進は以下の手順で行う。- 問題を (問題 33) の順に並べる。
    • はじめ、疲労度は 00 である。
    • 問題 33 を解く。疲労度は 5×0+7=75 \times 0 + 7 = 7 に変化する。
    • 全ての問題を解いた時点での疲労度は 77 である。よって 22 日目の消費した体力は 77 となる。
  • 問題を (問題 33) の順に並べる。
  • はじめ、疲労度は 00 である。
  • 問題 33 を解く。疲労度は 5×0+7=75 \times 0 + 7 = 7 に変化する。
  • 全ての問題を解いた時点での疲労度は 77 である。よって 22 日目の消費した体力は 77 となる。
  • 精進全体での消費した体力の総和は 10+7=1710 + 7 = 17 である。
5 50000000
100000 10000000
100000 10000000
100000 10000000
100000 10000000
100000 10000000
5 50000000

1111 問ずつ解いていく精進が答えとなります。

10 100000000
5 88
66 4
52 1
3 1
12 1
53 25
11 12
12 2
1 20
47 10
2 73647
15 100000000
2387 3178
2369 5772
1 29
36 3
52 2981
196 1
36 704
3 3
1501 5185
23 628
3623 810
80 101
6579 15
681 7
183 125
4 54468135