可以使用队列模拟所有事件来解决此题。但是队列是先进先出的特性,无法让队列中一个元素离开,所以需要额外的信息来记录队列中当前某一个元素是否有效。本题可以通过记录每次入队时的时间(或者说此次事件的编号),来判断当前一个元素是否有效,每次购买时,检查当前队头元素所记录的时间是否和最后一次入队时间相同,不相同则为无效。如果无效,则直接出队即可。
队列中的人数同样也能用一个额外的变量来记录,入队事件则人数加一,离队事件则人数减一。
一家商店正在进行限量商品的售卖,商品总数初始为 total。顾客们需要排队,队伍最前方的人才能购买商品,每人每次可以购买任意数量。排队过程中,人们可以随时离开队伍(即便不在队首),也可以重新加入队尾。 商店有一个特殊规则:当剩余商品数量降至不超过 limit 时,当前队首的人会立刻将剩余的全部商品买走,随后队列立即清空,此后发生的任何事件都将失效。 你作为商店的记录员,会按顺序记录下 q 次事件,共有四种类型:
1:一名名字为 name 的人加入队伍末尾(保证当前他不在队伍中)。2:名字为 name 的人离开队伍(保证他在队伍中,但不一定是队首)。3:队首的人购买 x 个商品(保证此时商品数量足够,且 x>0)。4:你查看当前队伍中的人数。
你需要输出每次查看时队伍里的人数,并在事件全部结束或商品被清空后,按名字的字典序输出所有曾加入过队伍的人各自的累计购买数量。
Scan the QR code below with WeChat to sign in
First-time scan will create your account automatically
请使用微信扫描下方二维码完成注册