#SIM302. 无人仓库订单

SIM302 无人仓库订单

难度梯度:T2+|训练重点:事务成功才提交

题目描述

仓库有 N 种商品,第 i 种商品有 stock_i 件,单价为 price_i。接下来有 Q 笔订单,每笔订单恰好包含两项需求 (a,x) 和 (b,y),表示购买 x 件 a 商品和 y 件 b 商品。a 和 b 可能相同,此时需求应相加。 若两种需求合并后各商品库存都足够,则订单成功,一次性扣减库存,并将本笔金额加入累计营业额;否则订单失败,所有库存与营业额均不变。每笔输出 OK/FAIL 和当前累计营业额,最后输出库存。

每笔订单不可拆成两次部分成交。若 a=b,要求该种商品一次提供 x+y 件。失败订单不会产生金额,也不会改变后续订单看到的库存。

输入格式

第一行 N Q。接下来 N 行 stock_i price_i。接下来 Q 行 a x b y。

输出格式

先输出 Q 行 OK revenue 或 FAIL revenue;最后一行按编号输出 N 个剩余库存。

样例输入

2 3
3 4
2 7
1 2 2 1
1 1 1 1
2 2 1 1

样例输出

OK 15
FAIL 15
FAIL 15
1 1

样例说明

首单花费 2×4+1×7=15;第二单对商品 1 合并后需 2 件但仅余 1 件。

数据范围

1≤N,Q≤2×10^5;0≤stock_i≤10^9;1≤price_i≤10^9;1≤x,y≤10^9。所有成功订单的累计金额不超过 9×10^18。

子任务

20 分:N,Q≤100;30 分:a≠b;50 分:无附加限制。


Problem Info

#SIM302. 无人仓库订单

ID 10334
类型 传统题
时间 1000ms
内存 256MiB
尝试 2 已通过 1
难度 10
上传者
标签
模拟状态维护T2+