描述
对于川农牛的真实身份,目前已经有了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);
}
}
}