HM300 添加后刷新容器

HM300 添加后刷新容器

HM300 添加后刷新容器

来源: 第 300 集 机房预约系统-解决检测重复账号添加中的bug

难度: 普及

时间限制: 1s

空间限制: 64MB

题目描述

去重只看容器。若添加成功后只写了文件、**没有把刚写入的账号放进容器**,同一轮会话里再用同一个学号或职工号,checkRepeat 仍会认为没有重复,文件里就会出现两行相同编号。

空文件开始时这个漏洞最明显:先加 1 Zhang 123 成功,再加学号 \(1\) 的另一个人,旧实现也会放行。

修复办法很短:添加成功、关闭写流之后,立刻再调用一次 initVector——先清空两个容器,再从文件把**包括刚追加的那一行**全部读回来。此后无论学生还是教师,刚写入的编号都能被检测到。

checkRepeat 仍是:true 表示重复;type==1 用迭代器比学号,否则比职工号;姓名不参与。

先装入两份名册(可以为空),再处理 \(q\) 次添加。每次 t id name pwd。重复则输出对应提示且不写文件;成功则写入、刷新容器、输出 添加成功。最后输出两份文件。

输入格式

第一行整数 \(n\),接下来 \(n\) 行学生。

下一行整数 \(m\),接下来 \(m\) 行教师。

下一行整数 \(q\)。

接下来 \(q\) 行:t id name pwd

输出格式

每次添加一行提示。然后 student.txt 段与 teacher.txt 段,格式同前一问。

样例

输入 #1

0
0
5
1 1 Zhang 123
1 1 Li 654321
1 2 Li 654321
2 5 Wang 123
2 5 Zhao 1

输出 #1

添加成功
学号重复,请重新输入
添加成功
添加成功
职工号重复,请重新输入
student.txt
1 Zhang 123
2 Li 654321
teacher.txt
5 Wang 123

输入 #2

1
1 Zhang 123
0
2
1 1 Chen 0
1 2 Chen 0

输出 #2

学号重复,请重新输入
添加成功
student.txt
1 Zhang 123
2 Chen 0
teacher.txt

说明

\(0 \le n,m \le 200\),\(1 \le q \le 200\)。

不要改成“只比较编号的某一位”。漏洞是容器没跟上文件,不是比较方式。学生与教师刷新后都要生效。

信息

ID
1299
难度
9
分类
(无)
标签
(无)
递交数
2
已通过
1
通过率
50%
上传者