HM307 预约拆串
HM307 预约拆串
来源: 第 307 集 机房预约系统-预约类中获取所有预约信息
难度: 普及
时间限制: 1s
空间限制: 64MB
题目描述
预约类 OrderFile 的构造函数负责把文件里所有记录读进内存。先准备六个字符串:date、interval、stuId、stuName、roomId、status,并把成员 mSize 置 \(0\)。用输入流每次读入六个**尚未拆开**的串,形如 date:1。
拆串必须按下面规则,不要改成别的下标:
- 对字符串 \(s\) 做
find(':'),得到位置 \(p\)。 - 若找不到冒号(位置为 \(npos\),可当成 \(-1\)),这一段直接跳过,不插入。
- 否则键为
s.substr(0, p),值为s.substr(p + 1, s.size() - p - 1)。
第二段长度必须写成 \(size - p - 1\):从冒号后一个字符起,一直取到末尾,多一位数字时同样成立。
把六个键值用 insert(make_pair(key, value)) 放进小 map<string, string>,再把小表 insert(make_pair(mSize, smallMap)) 放进大表 map<int, map<string, string>>,然后 mSize 加一。记录序号因此从 \(0\) 开始。属性键不重复、序号不重复,用 map 即可,不用 multimap。
输出时先按外层迭代器走大表,再按内层迭代器走小表(map 会按键的字典序排列)。最后输出 mSize。
输入格式
第一行一个整数 \(n\)。
接下来 \(n\) 行,每行若干串,多数为 属性:值;也可能夹杂不含冒号的废串,废串应被跳过。
输出格式
对大表中每条记录:
- 一行
记录条数 k,\(k\) 为外层键; - 随后每个内层键值一行:
key = A value = B。
全部记录之后一行:size = m,\(m\) 为 mSize。
样例
输入 #1
2
date:1 interval:2 stuId:1 stuName:张三 roomId:3 status:1
date:2 interval:2 stuId:1 stuName:张三 roomId:1 status:1
输出 #1
记录条数 0
key = date value = 1
key = interval value = 2
key = roomId value = 3
key = status value = 1
key = stuId value = 1
key = stuName value = 张三
记录条数 1
key = date value = 2
key = interval value = 2
key = roomId value = 1
key = status value = 1
key = stuId value = 1
key = stuName value = 张三
size = 2
输入 #2
1
date:11 interval:2 stuId:10 stuName:李四 roomId:2 badtoken status:1
输出 #2
记录条数 0
key = date value = 11
key = interval value = 2
key = roomId value = 2
key = status value = 1
key = stuId value = 10
key = stuName value = 李四
size = 1
说明
\(1 \le n \le 200\)。样例 #1 两条完整记录,内层按 map 字典序输出。样例 #2 的 date:11 用来核对 \(size-p-1\):值有两位时仍要整段截下;badtoken 没有冒号,不能插入。
信息
- ID
- 1306
- 难度
- (无)
- 分类
- (无)
- 标签
- (无)
- 递交数
- 0
- 已通过
- 0
- 通过率
- ?
- 上传者