200字
采购订单
2025-12-06
2025-12-06

题目描述

在一个采购系统中,采购申请(PR)需要经过审批后才能生成采购订单(PO)。每个PR包含商品的单价(假设相同商品的单价一定是一样的)及数量信息。

系统要求对商品进行分类处理:单价高于100元的商品需要单独处理,单价低于或等于100元的相同商品可以合并到同一采购订单PO中。针对单价低于100的小额订单,如果量大可以打折购买。

具体规则如下:

如果PR状态为"审批通过",则将其商品加入到PO中。如果PR的状态为"审批拒绝"或"待审批",则忽略该PR。

对于单价高于100元的商品,每个商品单独生成一条PO记录。对于单价低于或等于100元的商品,将相同商品的数量合并到一条PO记录中。

如果商品单价<100且商品数量>=100,则单价打9折。

输入描述

第一行包含整数N,表示PR的数量。

接下来N行,每行包含四个用空格分割的整数,按顺序表示:商品ID,数量,单价,PR状态 (0表示审批通过,1表示审批拒绝,2表示待审批)

输出描述

输出若干行,每行表示一条PO记录,按以下格式输出:

对于单价高于100元的商品:商品ID 数量 单价

对于单价低于或等于100元的商品: 商品ID 总数量 打折后的单价(向上取整)

输出的PO记录按商品ID升序升序排列,相同商品按照数量降序排列

补充说明

  • 2 <= n <= 1000

  • 1 <= 商品价格 <= 200

  • 1 <= 商品数量 <= 1000

  • 1 <= 商品编号 <= 1000

示例1

输入

2
1 200 90 0
2 30 101 0

输出

1 200 81
2 30 101

说明

商品1的原始单价为90,审批通过,生成一条PO,满足打折条件,打折后单价为81。

商品2的单价为101,审批通过,生成一条PO

示例2

输入

3
1 10 90 0
1 5 90 0
2 8 120 0

输出

1 15 90
2 8 120

说明

PR1和PR2均为商品1,单价90,审批通过,单价低于100元,合并数量为150.

PR3为商品2,单价120元,审批通过,单价高于100元,单独生成一条PO记录。

示例3

输入

4
1 5 80 0
2 3 120 0
3 2 90 1
4 10 150 2

输出

1 5 80
2 3 120

说明

PR1:商品1,单价80元,审批通过,单价低于100元,合并到PO中。PR2:商品2,单价120元,审批通过,单价高于100元,单独生成一条PO记录。PR3:审批拒绝, 忽略。PR4待审批忽略。

import math

def process_pr_orders():
    n = int(input())

    # 存储单价>100的商品(每个PR单独记录)
    high_price_po = []
    # 存储单价<=100的商品(按ID合并)
    # 格式: {商品ID: {"quantity": 总数量, "price": 单价}}
    low_price_info = {}

    for _ in range(n):
        goods_id, quantity, price, status = map(int, input().split())

        # 只处理审批通过的PR
        if status != 0:
            continue

        if price > 100:
            # 单价>100,单独处理
            high_price_po.append((goods_id, quantity, price))
        else:
            # 单价<=100,合并处理
            if goods_id in low_price_info:
                # 已有记录,累加数量
                low_price_info[goods_id][0] += quantity
            else:
                # 新商品,创建记录
                low_price_info[goods_id] = [quantity,price]

    # 处理单价<=100的商品
    low_price_result = []
    for goods_id, (total,price) in low_price_info.items():

        # 检查是否需要打折
        if total >= 100:
            # 打9折并向上取整
            discounted_price = math.ceil(price * 0.9)
        else:
            discounted_price = price

        low_price_result.append((goods_id, total, discounted_price))

    # 合并所有结果
    all_results = low_price_result + high_price_po

    # 排序:先按商品ID升序,再按数量降序
    all_results.sort(key=lambda x: (x[0], -x[1]))

    # 输出结果
    for goods_id, quantity, price in all_results:
        print(f"{goods_id} {quantity} {price}")


if __name__ == "__main__":
    process_pr_orders()

采购订单
作者
Shisuiyi
发表于
2025-12-06
License
CC BY-NC-SA 4.0

评论