13. 真假桶装水
桶装饮用水是北京市强制监管的商品,每一桶水的密封口处都应该能够找到一个标签,刮开后可以找到这桶水的电子监管号码。电子监管码一般是一个 16 位或 20 位的数字,把这个数字通过网络、手机或短信的方式发送给中国产品质量电子监管网,就可以得到关于该产品的品牌、名称、生产日期等内容。通过这些,我们就可以判断一桶水是不是假冒的。
在查询信息发送到电子监管网时,电子监管网会同时记录下该监管码的查询历史记录,和查询者的电话。因为某些 JS 会在假冒其它商品时通过非法手段获得一些合法的监管码,并在自己的产品上多次使用。如果一个监管码出现了来自不同电话号码的多次查询,就可以假定这个商品肯定是假的。
可以看出,电子监管系统是否能够生效的一个重要环节就是每个消费者都去检查自己购买的商品是否是真的,否则就可能被 JS 钻了制度的空子。因此,今后同学们购买桶装水时,最好仔细查验一下它的电子监管码,对自己的权利负责,也对他人的权利负责。
现在请你实现一个类似于电子监管网的系统,在一个文件 jgm.dat 中存放了合法的监管码,该文件以文本文件的形式存在,每行存放一个监管码,监管码为 16 位或 20 位的数字。该文件的尺寸不超过 4M。
输入
程序的输入每行包括一个要验证的监管码和一个电话号码(不超过 11 位)。其中查询同一个监管码的不同电话号码数不超过 10 个。
输出
如果一行上的监管码合法,则输出 "OK";若验证码被多个电话号码多次查询,则输出 "OK, but the code has been queried n times",其中 n 为查询该监管码的不同电话号码数;若验证码没有出现在给定的数据文件中,则输出 "Bad code"。
数据文件
测试用例 1 以文本方式显示
1.12345678901234567890 68910000↵
2.1234567890123456 68910000↵
3.12345678901234567890 68910001↵
4.66666666666666666666 12345678901↵
5.12345678901234567890 68910000↵
以文本方式显示
1.OK↵
2.OK↵
3.OK, but the code has been queried 2 times↵
4.Bad code↵
5.OK, but the code has been queried 2 times↵
1秒 61440KB 0
分析:考察了文件处理和hash的知识。