D


私信TA

用户名:ALS1111

访问量:22109

签 名:

等  级
排  名 55
经  验 11377
参赛次数 0
文章发表 132
年  龄 0
在职情况 学生
学  校
专  业

  自我简介:

TA的其他文章

解题思路:

python代码超时,思路上感觉没什么问题,可能是python的运行效率太慢了。


假设每个品种的巧克力用cho[i]表示,cho[i][0]代表价格,cho[i][1]代表剩余保质期天数,cho[i][2]代表剩余个数。

建立一个变量now,代表已经买了多少块巧克力。我们可以发现,对于一种巧克力我们最多能买的个数cho[i][1]-now。

了解了这点之后,我们在分情况进行购买即可。代码中有标注。


①将这些巧克力根据价格升序排序。

②遍历这些巧克力。



参考代码:

def f(x,m):  
    cho = []  
    for i in range(m):  
        temp = tuple(int(i) for i in input().strip().split())  
        cho.append(temp)  
          
    cho.sort(key = lambda x:x[0])  
  
    now = 0  
    sum = 0  
    for i in range(m):  
        if cho[i][1] - now <= 0:      #第i种巧克力不能买
            continue  
              
        if cho[i][1] - now <= cho[i][2]:     #第i种巧克力最多能买的个数<=第i种巧克力剩余的个数(供大于求)
            if x - now >= cho[i][1] - now:   #我们还需要买的巧克力个数>=第i种巧克力最多能买的个数
                sum = sum + (cho[i][1] - now)*cho[i][0]  
                now = cho[i][1]  
            else:                            #我们还需要买的巧克力个数<=第i种巧克力最多能买的个数
                sum = sum + (x - now)*cho[i][0]  
                now = x  
        else:                                #第i种巧克力最多能买的个数>第i种巧克力剩余的个数(供不应求)
            if x - now >= cho[i][2]:  
                sum = sum + (cho[i][2])*cho[i][0]  
                now = now + cho[i][2]  
            else:  
                sum = sum + (x - now)*cho[i][0]  
                now = x  
  
        if now == x:  
            print(sum)  
            break  
  
    if now != x:  
        print(-1)  
  
  
if __name__ == '__main__':  
    x,m = map(int,input().strip().split())  
    f(x,m)


 

0.0分

1 人评分

  评论区

  • «
  • »