小L的三角尺
题号:NC311976
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
Special Judge, 64bit IO Format: %lld

题目描述

\hspace{15pt}小 L 的科研毫无头绪,于是他开始玩他的直角三角尺。
\hspace{15pt}小 L 拥有 n 把直角三角尺,第 i 把尺子的两条直角边长度分别为 x_iy_i。小 L 突然灵光一现想到了一个有趣的问题:
\hspace{15pt}对于第 i 把尺子,小 L 可以选择一个非负整数 t_i 作为打磨掉的长度(即打磨后的直角边长变为 y_i - t_i)。该操作必须满足 0 \leq t_i \leq y_i,即打磨长度不能超过原边长。
\hspace{15pt}特别地,当 t_i = y_i 时,打磨后该直角边长度变为 0,此时三角形退化为一条线段,其斜边长度等于另一条直角边的长度,即 x_i

\hspace{15pt}现在小 L 拥有总共 w 的打磨额度,所有尺子的打磨长度之和必须满足 \textstyle\sum_{i=1}^n t_i \leq w。请问在最优策略下,这 n 把三角尺的斜边长度之和最小可以是多少?

输入描述:

\hspace{15pt}第一行输入两个正整数 n, w \left(1\leq n \leq 5\times 10^5;\, 1\leq w\leq 10^6\right),分别表示直角三角尺的个数和总打磨额度。
\hspace{15pt}此后 n 行,第 i 行输入两个正整数 x_i, y_i \left(1\leq x_i, y_i \leq 10^9\right),表示第 i 把直角三角尺的两条直角边长度。其中 y_i 为可打磨的直角边。

输出描述:

\hspace{15pt}输出一行一个实数,表示所有直角三角尺打磨后的斜边长度之和的最小值。

\hspace{15pt}由于实数的计算存在误差,当误差的量级不超过 10^{-6} 时,您的答案都将被接受。具体来说,设您的答案为 a,标准答案为 b,当且仅当 \tfrac{|a-b|}{\max(1,|b|)}\leq 10^{-6} 时,您的答案将被接受。
示例1

输入

复制
2 1
3 4
5 12

输出

复制
17.083045974

说明

\hspace{15pt}在这个样例中,初始时,第一把尺子斜边为 \sqrt{3^2+4^2}=5,第二把尺子斜边为 \sqrt{5^2+12^2}=13,总和为 18
\hspace{23pt}\bullet\,若打磨第一把尺子(y_1 变为 3),其斜边变为 \sqrt{3^2+3^2}=\sqrt{18},总和约为 \sqrt{18} + 13
\hspace{23pt}\bullet\,若打磨第二把尺子(y_2 变为 11),其斜边变为 \sqrt{5^2+11^2}=\sqrt{146}\,总和约为 \sqrt{146} + 5
\hspace{15pt}最小值为 \sqrt{146} + 5
示例2

输入

复制
1 10
3 4

输出

复制
3.000000000

说明

\hspace{15pt}在这个样例中,只有一把尺子,直角边为 34。额度 w=10 足够大,但受限于 t_i \leq y_i,最多只能将 y_1 减小 4 变为 0。此时斜边长度为 \sqrt{3^2+0^2}=3