7-3 Lord游戏 (20分)

恰逢班级团建,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 1n100<a,b<8

对于40%的数据,有 1 ≤ n ≤ 20 , 0 < a , b < 8 1≤n≤20,0<a,b<8 1n200<a,b<8

对于60%的数据,有 1 ≤ n ≤ 100 1≤ n≤100 1n100

对于80%的数据,保证答案不超过 10 ​ 9 10 ​^9 109

对于100%的数据,有 1 ≤ n ≤ 1000 , 0 < a , b < 10000 1 ≤ n ≤1000,0<a,b<10000 1n10000<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)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值