欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

1020 月饼 (25分)

程序员文章站 2022-06-07 15:14:43
...

1020 月饼 (25分)
输入样例:

3 20
18 15 10
75 72 45
输出样例:

94.50

解题心得:

  1. 本题因为要排序,优先考虑使用二维数组和sorted最常用的模式;
  2. python在建立二维数组时有一个坑,就是[[]] * n中出现浅拷贝问题,操纵一个元素等于操作所有元素,正确建立二维数组的方式是
    for i in range(n):
        cakes.append([])
  1. 注意审题,哪些是正整数,哪些是正数,pta平台返回三大类错误:1⃣️答案错误,那就是语法没问题是逻辑的问题;2⃣️没有得到返回,语法错误,这时候就要考虑越界、转换问题;3⃣️超时问题,主要优化for循环;
# -*- coding: utf-8 -*-
import sys


if __name__ == '__main__':
    input_str = sys.stdin.readline().split()
    n, d = int(input_str[0]), int(input_str[1])
    store_str = sys.stdin.readline().split()
    sale_str = sys.stdin.readline().split()
    store_int = list(map(float, store_str))
    sale_int = list(map(float, sale_str))
    cakes = []
    for i in range(n):
        cakes.append([])

    for i in range(n):
        price = sale_int[i] / store_int[i]
        cakes[i] += [price, store_int[i], sale_int[i]]
    sorted_price = sorted(cakes, key=lambda x: x[0], reverse=True)
    profit = 0.0 
    idx = 0
    while d > 0 and idx < n:
        if d > sorted_price[idx][1]:
            profit += sorted_price[idx][2]
            d -= sorted_price[idx][1]
        else:
            profit += d * sorted_price[idx][0]
            break
        idx += 1
    print('%.2f' % profit)



相关标签: 算法修养