当前位置: 首页 > 面试经验 >

【华为OD机试2023】云短信平台优惠活动Python

优质
小牛编辑
137浏览
2023-03-28

【华为OD机试2023】云短信平台优惠活动Python

题目描述:

某云短信厂商,为庆祝国庆,推出充值优惠活动。

现在给出客户预算,和优惠售价序列,求最多可获得的短信总条数。

输入描述:

第一行客户预算M,其中 0<=M<=1000000

第二行给出售价表,P1,P2...Pn, 其中 1<=n<=100,Pi为充值i元获得的短信条数。 1<=Pi<=1000, 1<=n<=100

输出描述:

最多获得的短信条数

示例1

输入:

6

10 20 30 40 60

输出:

70

说明:

分两次充值最优,1元、5元各充一次。总条数 10+60=70

示例2

输入:

15

10 20 30 40 60 60 70 80 90 150

输出:

210

说明:

分两次充值最优,10元、5元各充一次。总条数 150+60=210

解题思路:

把所有档次的充值,以每元可获得的短信数为key,价格为value存到字典中,然后对字典排序,确保性价比最高的充值方式在最前。

然后依次遍历各性价比的充值金额列表,优先购买性价比最高的,性价比相同时优先购买最贵的,直到花完钱,然后输出金额


m=int(input())
shoujia=list(map(int,input().split()))
data={}
for i,value in enumerate(shoujia):
ave=value/(i+1)
if data.get(ave)==None:
data[ave]=[i+1]
else:
data[ave].append(i+1)
data=sorted(list(data.items()),key=lambda x:x[0],reverse=True)
goumai=[]
for dangci in data:
paixu=sorted(dangci[1],reverse=True)
for jiage in paixu:
if m==0:
break
if jiage<=m:
m-=jiage
goumai.append(jiage)
sum=0
for i in goumai:
sum+=shoujia[i-1]
print(sum)

 类似资料: