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%
- 上传者