#tANXINlydlt00x0703. 国王游戏

国王游戏

大臣排队问题

题目描述

恰逢 H 国国庆,国王邀请 n 位大臣来玩一个有奖游戏。

首先,他让每个大臣在左、右手上面分别写下一个整数,国王自己也在左、右手上各写一个整数。

然后,让这 n 位大臣排成一排,国王站在队伍的最前面。

排好队后,所有的大臣都会获得国王奖赏的若干金币,每位大臣获得的金币数分别是:

排在该大臣前面的所有人的左手上的数的乘积除以他自己右手上的数,然后向下取整得到的结果。

国王不希望某一个大臣获得特别多的奖赏,所以他想请你帮他重新安排一下队伍的顺序,使得获得奖赏最多的大臣,所获奖赏尽可能的少。

注意,国王的位置始终在队伍的最前面。

输入格式

第一行包含一个整数 n,表示大臣的人数。

第二行包含两个整数 a 和 b,之间用一个空格隔开,分别表示国王左手和右手上的整数。

接下来 n 行,每行包含两个整数 a 和 b,之间用一个空格隔开,分别表示每个大臣左手和右手上的整数。

输出格式

输出只有一行,包含一个整数,表示重新排列后的队伍中获奖赏最多的大臣所获得的金币数。

输入输出样例 #1

输入 #1

3
1 1
2 3
7 4
4 6

输出 #1

2

输入输出样例 #2

输入 #2

2
2 1
1 1
1000 1

输出 #2

1000

限制条件

  • 1n10001 \le n \le 1000
  • 0<a,b<100000 < a, b < 10000

样例解释 #1

国王:左手 1,右手 1 大臣 1:左手 2,右手 3 大臣 2:左手 7,右手 4 大臣 3:左手 4,右手 6

原始顺序(按输入顺序):

  1. 国王:无奖励
  2. 大臣 1:1÷3=01 \div 3 = 0
  3. 大臣 2:(1×2)÷4=2÷4=0(1 \times 2) \div 4 = 2 \div 4 = 0
  4. 大臣 3:(1×2×7)÷6=14÷6=2(1 \times 2 \times 7) \div 6 = 14 \div 6 = 2

最大奖励为 2

但我们可以重新排列大臣顺序,使得最大奖励最小化。

设国王左手为 a0a_0,右手为 b0b_0,大臣 ii 左手为 aia_i,右手为 bib_i

大臣 ii 的奖励为:$\lfloor \frac{a_0 \times a_1 \times \dots \times a_{i-1}}{b_i} \rfloor$

最优排列策略:按照 ai×bia_i \times b_i 从小到大排序。

排序后:

  1. 大臣 1(2,3):2×3=62 \times 3 = 6
  2. 大臣 3(4,6):4×6=244 \times 6 = 24
  3. 大臣 2(7,4):7×4=287 \times 4 = 28

按此顺序排列:

  1. 大臣 1:1÷3=01 \div 3 = 0
  2. 大臣 3:(1×2)÷6=2÷6=0(1 \times 2) \div 6 = 2 \div 6 = 0
  3. 大臣 2:(1×2×4)÷4=8÷4=2(1 \times 2 \times 4) \div 4 = 8 \div 4 = 2

最大奖励为 2

解题思路

  1. 将国王和大臣的左右手乘积 ai×bia_i \times b_i 作为排序依据
  2. 按照 ai×bia_i \times b_i 从小到大排序
  3. 计算排序后每个大臣获得的金币数,取最大值
  4. 由于数值可能很大,需要使用高精度计算