解题思路:

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.0分

1 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 0 条评论

暂无评论