
描述
对于川农牛的真实身份,目前已经有了114514114514种说法。
其中有一种说法已经得到了许多人认同,说他是四川农业大学信息工程学院的一名学生。
随着毕业临近,川农牛也在魔都找到了一份 SoftwareEngineer 工作,就职于某404404公司。
当列车停稳在陆家嘴站,川农牛背着双肩背包挤出二号线,又是一个萧瑟的秋天。在上海环球金融中心大厦的高速电梯里,川农牛的格子衬衫在其他西装革履的金融从业者映衬下十分显眼。电梯到了60F川农牛就牛不停蹄的跑去开上午的组会。
会上Boss说:我们404公司向来注重用户隐私安全,为了提升VIP用户帐号的安全性,404404公司决定实施一项措施:
对在1小时内(注:00:00:00与01:00:00仍视为在1小时内)出现66次或66次以上密码错误的VIP账户,暂时禁止该帐号被登录。而对普通账户不作处理。
这个Boss是川农牛一直敬仰的技术大牛,当初也是他内推自己进的404404公司。为了给技术大牛留下好印象,川农牛自高奋勇的来解决这个需求。
现在川农牛拿到了某日全部密码错误的日志,他想知道有哪些帐号被暂时禁止登录。川农牛坚信JAVA是最优秀的编程语言,因此自己只会用JAVA来写。在巨大的落地窗前,面对着繁忙的黄浦江,川农牛开始CodingCoding,吃的是草,挤出的是代码,他是一个想用代码征服上海滩的牛?
输入
第一行包含一个整数NN,代表记录的行数。
以下NN行每行包含一个字符串SS和一个时间TT。其中是SS代表密码错误的账号IDID;TT代表发生登陆错误时间,格式是hh:mm:ss。
1≤N≤10^5
字符串长度不超过10位由阿拉伯数字和小写字母组成,其中字母s
打头的代表是VIP用户
00:00:00≤T≤23:59:59
输出
按照字典序从小到大输出所有被禁止登录的VIP帐号IDID,每个一行。
输入样例 1
11 s1000 00:00:00 s1001 00:59:00 s1001 00:58:00 s1001 01:00:00 s1000 01:00:00 s1000 02:00:00 s1000 03:00:00 s1001 01:00:01 s1001 01:00:01 s1000 04:00:00 s1001 01:23:14
输出样例 1
s1001
提示
请使用Main作为类名,删除package语句
请复习Java集合类,可以与同学交流讨论思路,但要独立编写代码。
使用学号账号完成,使用其他账号无效。
本题共十个测试点,数据量从小到大,每个测试点10分。
解题思路:
首先采用hashMap,键值对的方式对输入的数据进行存储。键就是vip的名字,值是一个动态数组 ArrayList, 里面存放的是一条条错误日志的时间,换算成秒来保存,方便后面计算一个小时(即3600秒)内是否存在六条即以上的错误日志。存储好以后,后面的步骤就比较简单了。具体看下面的代码。
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.StreamTokenizer; import java.util.*; /** * shiyan3 * create by chenshihang on 2018/11/2 */ public class shiyan3 { public static boolean isBanThisVip(List<Integer> timeList){ boolean flag = false; int size = timeList.size(); if(size<6){ return flag; } Collections.sort(timeList, new Comparator<Integer>() { @Override public int compare(Integer o1, Integer o2) { return o1-o2; } }); for(int i=0;i<=size-6;i++){ if(timeList.get(i+5)-timeList.get(i) <= 3600){ flag = true; break; } } return flag; } public static void main(String[] args) throws IOException { StreamTokenizer in = new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in))); in.nextToken(); int n = (int)in.nval; Map<String,List<Integer>> infos = new HashMap<>(); for(int i=0;i<n;i++){ in.nextToken(); String name = in.sval; in.nextToken(); int h = (int)in.nval; in.nextToken(); in.nextToken(); int m = (int)in.nval; in.nextToken(); in.nextToken(); int s = (int)in.nval; if(name==null ||name.charAt(0)!='s'){ continue; }else { List<Integer> timeList = infos.get(name); if(timeList == null){ timeList = new ArrayList<>(); } timeList.add(h*60*60+m*60+s); infos.put(name,timeList); } } Set<String> nameSet = infos.keySet(); List<String> names = new ArrayList<>(); for(String name:nameSet){ if(isBanThisVip(infos.get(name))){ names.add(name); } } String[] result = new String[names.size()]; result = names.toArray(result); Arrays.sort(result); for(String item:result){ System.out.println(item); } } }