HM270 三容器加映射
HM270 三容器加映射
来源: 第 270 集 演讲比赛流程管理系统-容器的设计以及初始化操作
难度: 普及-
时间限制: 1s
空间限制: 64MB
题目描述
比赛前先设计容器。编号和具体选手要分开存:
v1:vector<int>,第一轮参赛选手的编号;v2:vector<int>,第一轮晋级、也就是第二轮参赛的编号;vVictory:vector<int>,决赛胜出的前三名编号。
这三个都可以合成「容器嵌套容器」的一个大容器,但拆开后每个名字职责更清楚。它们只存编号。选手本人放进 map<int, Speaker> m_Speaker:键是编号,值是选手。编号不会重复,所以用 map 即可,不必 multimap。
再用 int m_Index 记下当前轮数,一共两轮。
封装 initSpeech:对 v1、v2、vVictory、m_Speaker 都调用 clear(),并把 m_Index 置为 \(1\)。管理类的构造函数里要调用它,保证对象一创建就是空容器、轮数为 \(1\)。
读入若干操作,维护上述结构。编号与选手的绑定必须写进 map,查询姓名、分数时按编号查找。
输入格式
第一行一个整数 \(q\)(\(1 \le q \le 200\))。
接下来 \(q\) 行,每行一条操作:
INIT:调用initSpeech,清空四个容器,轮数置 \(1\);P1 id:把编号id追加进v1;P2 id:把编号id追加进v2;PW id:把编号id追加进vVictory;BIND id name s0 s1:insert键值对,编号映射到姓名为name、两轮分数为 \(s0,s1\) 的选手(同一编号后写覆盖前写,可用下标赋值);SHOW:按输出格式打印当前状态。
编号是 \(10001\) 到 \(10012\) 的整数,姓名不含空白。
输出格式
对每次 SHOW 输出:
INDEX、空格、当前轮数;V1、空格、v1的全部编号(没有则该行只有V1);V2、空格、v2的全部编号;WIN、空格、vVictory的全部编号;MAP、空格、m_Speaker.size();- 随后按编号升序,每名选手一行:编号、姓名、两轮分数(一位小数)。
同一行多个编号之间一个空格。行末换行。
样例
输入 #1
8
BIND 10002 选手B 0 0
BIND 10001 选手A 0 0
P1 10001
P1 10002
P2 10001
SHOW
INIT
SHOW
输出 #1
INDEX 1
V1 10001 10002
V2 10001
WIN
MAP 2
10001 选手A 0.0 0.0
10002 选手B 0.0 0.0
INDEX 1
V1
V2
WIN
MAP 0
输入 #2
4
P1 10003
PW 10003
BIND 10003 选手C 88.5 90.0
SHOW
输出 #2
INDEX 1
V1 10003
V2
WIN 10003
MAP 1
10003 选手C 88.5 90.0
说明
构造之后就应处于 INIT 后的状态,因此一开始轮数是 \(1\)、四个容器皆空。map 按键排序,所以样例 1 先绑定 \(10002\) 再绑定 \(10001\),打印仍是 \(10001\) 在前。INIT 必须把映射一并清空。
信息
- ID
- 1269
- 难度
- (无)
- 分类
- (无)
- 标签
- (无)
- 递交数
- 0
- 已通过
- 0
- 通过率
- ?
- 上传者