CF572B Order Book

题目描述

在本题中,你需要处理一组股票交易所的买卖单,并用它们生成一个订单簿。 一个订单是指某参与者在交易所上买入或卖出股票的指令。第 $i$ 个订单有价格 $p_{i}$、方向 $d_{i}$ —— 买入('B')或卖出('S'),以及整数 $q_{i}$。这表示该参与者愿意以单价 $p_{i}$ 买入或卖出 $q_{i}$ 股股票。$q_{i}$ 的值也称为该订单的成交量。 所有价格 $p$ 和方向 $d$ 相同的订单,都会合并为价格为 $p$、方向为 $d$ 的一个聚合订单。该订单的成交量为所有初始订单成交量之和。 订单簿是由这些聚合订单组成的列表,第一部分包含所有卖出订单,按价格从高到低排序;第二部分包含所有买入订单,也按价格从高到低排序。 深度为 $s$ 的订单簿包含每个方向上最优的 $s$ 个聚合订单。买入订单价格越高越优,卖出订单价格越低越优。如果某个方向的聚合订单少于 $s$ 个,则全部都将被输出。 给定 $n$ 个股票交易订单。请为这些订单输出一个深度为 $s$ 的订单簿。

输入格式

输入的第一行包含两个正整数 $n$ 和 $s$($1 \leq n \leq 1000, 1 \leq s \leq 50$),表示订单数和订单簿深度。 接下来的 $n$ 行,每行包含一个字母 $d_{i}$('B' 表示买入,'S' 表示卖出),一个整数 $p_{i}$($0 \leq p_{i} \leq 10^{5}$)和一个整数 $q_{i}$($1 \leq q_{i} \leq 10^{4}$),分别表示订单的方向、价格和成交量。任意卖出订单的价格都高于任意买入订单的价格。

输出格式

输出不超过 $2s$ 行,内容为深度为 $s$ 的订单簿中的聚合订单。每一行的格式与输入相同。

说明/提示

记 $(x, y)$ 表示一个价格为 $x$,成交量为 $y$ 的订单。样例中聚合后的买入订单为 $(10, 3)$、$(20, 4)$ 和 $(25, 10)$,聚合后的卖出订单为 $(50, 8)$ 和 $(40, 1)$。 需要输出每个方向不超过两个最优订单,所以最差的买入订单 $(10, 3)$ 不应输出。 由 ChatGPT 5 翻译