运气是博彩的一个基本组成部分。有些人通过对投注对象有深入的了解来提高他们的胜算和收益。我们将采取一种不同的方法。
不同的博彩公司对同一个结果提供不同的赔率(odds 或 quotas)。(赔率为 $x$ 意味着如果你投注 1 欧元并准确预测了结果,你将收回 $x$ 欧元。如果你预测错误,你当然什么也得不到。注意,无论结果如何,你都要支付 1 欧元的投注金。)如果通过巧妙地进行多次投注,从而确保获得利润,会怎样呢?你希望使这种保证利润尽可能大。
我们想要投注的赛事有两个可能的结果。有 $n$ 家博彩公司提供不同的赔率。设第 $i$ 家博彩公司对第一个结果提供的赔率为 $a_i$,对第二个结果提供的赔率为 $b_i$。你可以对所提供的赔率的任意子集进行投注。你甚至可以在同一家博彩公司对两个结果都进行投注。然而,所有投注必须恰好为 1 欧元,并且你不能在同一家博彩公司对同一个结果进行多次投注。
如果出现第一个结果,你将从所有你投注了第一个结果的博彩公司 $i$ 那里收到 $a_i$ 欧元。同样,如果出现第二个结果,你将从所有符合条件的博彩公司那里收到 $b_i$ 欧元。当然,在这两种情况下,你都已经为你所做的每一笔投注支付了 1 欧元。
如果你以最优方式进行投注,最大的保证利润(即无论结果如何)是多少?
输入格式
第一行包含博彩公司的数量 $n$。接下来的 $n$ 行描述了每家博彩公司提供的赔率,包含两个用空格分隔的实数 $a_i$ 和 $b_i$ —— 分别为第 $i$ 家博彩公司对第一个和第二个结果提供的赔率。赔率最多给出 4 位小数。
数据范围
- $1.0 \le a_i, b_i \le 1000.0$
- $1 \le n \le 100\,000$
子任务
- 子任务 1(20 分):$n \le 10$
- 子任务 2(40 分):$n \le 1\,000$
- 子任务 3(40 分):无附加限制
输出格式
输出最大保证利润,四舍五入保留恰好 4 位小数。
以下是在各种语言中打印浮点数的命令:
- C 和 C++:
printf("%.4lf",(double)x); - Java:
System.out.printf("%.4lf",x); - Pascal:
writeln(x:0:4); - Python 3:
print("%.4lf"%x) - C#:
Console.WriteLine(String.Format("0:0.0000",x));
样例
输入 1
4 1.4 3.7 1.2 2 1.6 1.4 1.9 1.5
输出 1
0.5000
说明 1
最优投注策略包括:在第一家博彩公司投注第二个结果,并在第三家和第四家博彩公司投注第一个结果。如果出现第一个结果,我们将获得 $1.6 + 1.9 - 3 = 0.5$;如果出现第二个结果,我们将获得 $3.7 - 3 = 0.7$。因此,无论结果如何,我们都能保证获得 0.5 欧元的利润。