HM307 预约拆串

HM307 预约拆串

HM307 预约拆串

来源: 第 307 集 机房预约系统-预约类中获取所有预约信息

难度: 普及

时间限制: 1s

空间限制: 64MB

题目描述

预约类 OrderFile 的构造函数负责把文件里所有记录读进内存。先准备六个字符串:dateintervalstuIdstuNameroomIdstatus,并把成员 mSize 置 \(0\)。用输入流每次读入六个**尚未拆开**的串,形如 date:1

拆串必须按下面规则,不要改成别的下标:

  1. 对字符串 \(s\) 做 find(':'),得到位置 \(p\)。
  2. 若找不到冒号(位置为 \(npos\),可当成 \(-1\)),这一段直接跳过,不插入。
  3. 否则键为 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
通过率
?
上传者