1020 月饼 (25分)

1020 月饼 (25分)_第1张图片
输入样例:

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)



你可能感兴趣的:(算法修养)