恰逢班级团建,Lord邀请n位同学来玩一个有奖游戏。首先,他让每个同学在左、右手上面分别写下一个整数,Lord自己也在左、右手上各写一个整数。然后,让这n位同学排成一排,Lord站在队伍的最前面。排好队后,所有的同学都会获得Lord奖赏的若干金币,每位同学获得的金币数分别是:排在该同学前面的所有人的左手上的数的乘积除以他自己右手上的数,然后向下取整得到的结果。Lord不希望某一个同学获得特别多的奖赏,所以他想请你帮他重新安排一下队伍的顺序,使得获得奖赏最多的同学,所获奖赏尽可能的少。注意,Lord的位置始终在队伍的最前面。
输入格式:
第一行包含一个整数n,表示同学的人数。 第二行包含两个整数a和b,之间用一个空格隔开,分别表示Lord左手和右手上的整数。接下来n行,每行包含两个整数a和b,之间用一个空格隔开,分别表示每个同学左手和右手上的整数。
对于20%的数据,有 1 ≤ n ≤ 10 , 0 < a , b < 8 1≤ n≤ 10,0<a,b<8 1≤n≤10,0<a,b<8;
对于40%的数据,有 1 ≤ n ≤ 20 , 0 < a , b < 8 1≤n≤20,0<a,b<8 1≤n≤20,0<a,b<8;
对于60%的数据,有 1 ≤ n ≤ 100 1≤ n≤100 1≤n≤100;
对于80%的数据,保证答案不超过 10 9 10 ^9 109;
对于100%的数据,有 1 ≤ n ≤ 1000 , 0 < a , b < 10000 1 ≤ n ≤1000,0<a,b<10000 1≤n≤1000,0<a,b<10000。
输出格式:
输出只有一行,包含一个整数,表示重新排列后的队伍中获奖赏最多的同学所获得的金币数
输入样例:
在这里给出一组输入。例如:
3
1 1
2 3
7 4
4 6
输出样例:
在这里给出相应的输出。例如:
2
贪心选择性:除了Lord,按左右手乘积升序
这个题数会很大,可以用c写大数高精度,也可以java python大数类,不能用基本类型做
正好拿来练练我蹩脚的py
students = []
n = int(input())
for i in range(n+1):
students.append(list(map(int, input().split())))
sk = students[1:n+1]
sk.sort(key=lambda sk: sk[1]*sk[0])
students[1:n+1]=sk
ans = 0
last = students[0][0]
for i in range(1,len(students)):
ans = max(ans, last//students[i][1])
last *= students[i][0]
print(ans)