#P1407. e-Market
e-Market
题目描述
函馆市最近建立了一个商品交易市场。为了参与市场交易,每个交易者通过互联网发送订单,订单内容包括交易者姓名、订单类型(买入或卖出)、商品名称和报价。
在该市场中,只有当卖出订单的价格低于或等于买入订单的价格时,才能达成交易。交易价格为买入和卖出订单价格的平均值,向下取整到最接近的整数。为了排除不诚实的交易,不允许同一交易者的卖出和买入订单之间达成交易。市场的系统维护未达成交易的订单列表,并按以下方式处理新订单:
• 对于新的卖出订单,系统会与列表中满足条件的最高买入价格订单达成交易。如果有多个相同价格的买入订单,则选择最早的一个。
• 对于新的买入订单,系统会与列表中满足条件的最低卖出价格订单达成交易。如果有多个相同价格的卖出订单,则选择最早的一个。
市场每天从开放到。市场关闭时,所有剩余的订单将被取消。为了完整记录市场活动,系统每天保存所有接收到的订单。
市场经理要求系统管理员编写一个程序,用于报告市场的活动情况。报告必须包含两种信息:
- 对于每种商品,报告必须包含交易的最低价格、平均价格和最高价格。
- 对于每个交易者,报告必须包含该交易者为商品支付的金额和收到的金额。
输入
输入包含多个数据集。每个数据集代表一天的交易记录。每个数据集的第一行是一个整数(),表示记录中的订单数量。每条记录描述一个订单,包括交易者姓名、订单类型、商品名称和报价,用空格分隔。
交易者姓名由大写字母组成,长度不超过个字符。订单类型为字符串"BUY"或"SELL"。商品名称为单个大写字母。报价是一个小于的正整数。
记录中的订单按接收时间排序,第一行是最早的订单。
输入以一行包含结束。
输出
每个数据集的输出分为两部分,用一行包含两个连字符('-')分隔。
第一部分是商品信息。对于每种商品,程序应输出商品名称、交易的最低价格、平均价格和最高价格,用空格分隔。平均价格向下取整到最接近的整数。输出仅包含有交易的商品,并按字母顺序排列。
第二部分是交易者信息。对于每个交易者,程序应输出交易者姓名、支付的金额和收到的金额,用空格分隔。输出包含所有发送订单的交易者,并按姓名字典序排列。
每个数据集的输出后跟一行包含个连字符('-')。
样例输入 1
3
PERLIS SELL A 300
WILKES BUY A 200
HAMMING SELL A 100
4
BACKUS SELL A 10
FLOYD BUY A 20
IVERSON SELL B 30
BACKUS BUY B 40
7
WILKINSON SELL A 500
MCCARTHY BUY C 300
WILKINSON SELL C 200
DIJKSTRA SELL B 100
BACHMAN BUY A 400
DIJKSTRA BUY A 600
WILKINSON SELL A 300
2
ABCD SELL X 10
ABC BUY X 15
2
A SELL M 100
A BUY M 100
0
样例输出 1
A 150 150 150
--
HAMMING 0 150
PERLIS 0 0
WILKES 150 0
----------
A 15 15 15
B 35 35 35
--
BACKUS 35 15
FLOYD 15 0
IVERSON 0 35
----------
A 350 450 550
C 250 250 250
--
BACHMAN 350 0
DIJKSTRA 550 0
MACCARTHY 250 0
WILKINSON 0 1150
----------
X 12 12 12
--
ABC 12 0
ABCD 0 12
----------
--
A 0 0
----------
来源 Japan 2001