快乐星空Maker 2023-10-15 15:24 采纳率: 23.1%
浏览 12

卖坤坤,额,不知道该咋写。

                                     卖牛奶

蜗蜗开了一家只卖一种牛奶的店,店里的牛奶四个一盒,排成一排放置。蜗蜗发现超市里会来三种顾客:

第一种会直接拿走完整的一盒(没拆开的,总共有四个);
第二种会把完整的一盒拆开(拿走其中的一个);
第三种会优先选择已经拆开的牛奶盒,从中拿走一个,如果没有这样的牛奶,就拆开完整的一盒拿走其中的一个。
现在按照时间顺序给出超市过来买牛奶的顾客的信息,请帮忙计算超市至少需要多少盒牛奶才能让每个顾客都能按照自己的方式买到牛奶。

输入格式

第一行一个整数 n 表示有 n 个顾客;
第二行 n 个整数 a1,a2,...,an,表示第 i 个顾客的种类。

输出格式

      一行一个整数,表示超市至少需要多少盒牛奶才能让每个顾客都能按照自己的方式买到牛奶。

样例输入

3
3 2 1

样例输出

3

样例解释

      第一个顾客属于第三类,他会拆开一盒拿走其中的一个
      第二个顾客属于第二类,他会从新的牛奶盒中拆开拿走一个
      第三个顾客属于第一类,他会完整的拿走一盒牛奶

所以总共需要三盒牛奶。

数据范围
1≤n≤100000
ai∈{1,2,3}(ai 只可能是 1,2,3 中的一个)

  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-10-15 19:14
    关注

    【以下回答由 GPT 生成】

    解决方案如下:

    首先,我们需要统计每个顾客的种类。

    然后,根据题目描述的不同顾客种类来决定是否需要增加一盒牛奶。

    具体的算法步骤如下:

    1. 读取输入的顾客数量 n 和每个顾客的种类 a_i。
    2. 初始化不同种类的顾客数量为 0。
    3. 遍历每个顾客的种类 a_i,统计每个种类的顾客数量。
    4. 初始化需要的牛奶盒数为 0。
    5. 遍历每个顾客的种类 a_i,根据不同种类来增加牛奶盒数。
    6. 对于第一类顾客,直接增加一盒牛奶。
    7. 对于第二类顾客,如果之前有未打开的牛奶盒,减少一盒已打开牛奶盒的数量;否则,增加一盒牛奶。
    8. 对于第三类顾客,如果之前有已打开的牛奶盒,减少一盒已打开牛奶盒的数量;否则,增加一盒牛奶。
    9. 输出需要的牛奶盒数。

    以下是具体的实现代码:

    def calculate_milk_boxes(n, customers):
        customer_counts = [0, 0, 0]
        opened_boxes = 0
        needed_boxes = 0
    
        for customer in customers:
            customer_counts[customer-1] += 1
    
        for customer in customers:
            if customer == 1:
                needed_boxes += 1
            elif customer == 2:
                if opened_boxes > 0:
                    opened_boxes -= 1
                else:
                    needed_boxes += 1
            elif customer == 3:
                if opened_boxes > 0:
                    opened_boxes -= 1
                else:
                    needed_boxes += 1
    
            opened_boxes += 3 - customer_counts[0] - customer_counts[2]
    
        return needed_boxes
    
    n = int(input())
    customers = list(map(int, input().split()))
    
    result = calculate_milk_boxes(n, customers)
    print(result)
    

    时间复杂度分析: - 遍历顾客种类统计数量的时间复杂度为 O(n); - 遍历每个顾客的种类根据不同种类增加牛奶盒数的时间复杂度为 O(n); - 总的时间复杂度为 O(n)。

    空间复杂度分析: - 使用了一个数组保存顾客种类的数量,空间复杂度为 O(3) = O(1); - 使用了三个变量保存已打开牛奶盒的数量、需要的牛奶盒的数量和最终结果,空间复杂度为 O(3) = O(1); - 总的空间复杂度为 O(1)。



    【相关推荐】



    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    评论

报告相同问题?

问题事件

  • 创建了问题 10月15日

悬赏问题

  • ¥15 数据量少可以用MK趋势分析吗
  • ¥15 使用VH6501干扰RTR位,CANoe上显示的错误帧不足32个就进入bus off快慢恢复,为什么?
  • ¥15 大智慧怎么编写一个选股程序
  • ¥100 python 调用 cgps 命令获取 实时位置信息
  • ¥15 两台交换机分别是trunk接口和access接口为何无法通信,通信过程是如何?
  • ¥15 C语言使用vscode编码错误
  • ¥15 用KSV5转成本时,如何不生成那笔中间凭证
  • ¥20 ensp怎么配置让PC1和PC2通讯上
  • ¥50 有没有适合匹配类似图中的运动规律的图像处理算法
  • ¥15 dnat基础问题,本机发出,别人返回的包,不能命中