#CPP2F. 标签改名
标签改名
题意:
最初没有卡片。每张卡片带有一个小写字母标签,同名卡片可以有多张。
依次处理以下操作:
ADD s:增加一张标签为 的卡片。MOVE a b:将当前所有标签为 的卡片同时改名为 。原本标签为 的卡片保留,因此两部分数量相加。若没有标签为 的卡片,或 ,则不发生变化。COUNT s:输出当前标签为 的卡片数量。没有这种卡片时输出 ,询问不会增加卡片。
改名只影响执行该次操作时已经存在的卡片。之后仍然可以新建标签为 的卡片,它不会自动改为 。
处理完全部操作后,按标签的字典序输出所有仍有卡片的标签及其数量。
字典序比较从左到右找到第一个不同字母,字母靠前者较小;一方是另一方的完整前缀时,较短者较小。
输入格式:
第一行一个整数 (),表示操作次数。
接下来 行,每行给出一条上述操作:
ADD、COUNT操作给出字符串 ()。MOVE操作给出字符串 、()。
所有标签仅由小写英文字母组成。
输出格式:
先按操作顺序,对每条 COUNT 操作输出一行数量。
随后输出一行,表示最终仍有卡片的不同标签数量 。接下来 行,按标签字典序输出标签和卡片数量,以一个空格分隔。
最终没有卡片时,这一部分只输出一行 。
样例:
样例输入1:
10
ADD red
ADD blue
ADD red
MOVE red blue
COUNT red
COUNT blue
MOVE blue blue
ADD red
MOVE none red
COUNT red
样例输出1:
0
3
1
2
blue 3
red 1
样例解释1:
第一次改名后,三张卡片的标签均为 blue。后续新增的 red 卡片仍使用 red 标签。把 blue 改为 blue 不会翻倍数量,也不会删除卡片。
样例输入2:
3
COUNT x
MOVE x y
COUNT y
样例输出2:
0
0
0
相关
在下列比赛中: