题目描述
在一个采购系统中,采购申请(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 <= 10001 <= 商品价格 <= 2001 <= 商品数量 <= 10001 <= 商品编号 <= 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()