请使用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 timeList){
boolean flag = false;
int size = timeList.size();
if(size<6){
return flag;
}
Collections.sort(timeList, new Comparator() {
@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> infos = new HashMap<>();
for(int i=0;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 timeList = infos.get(name);
if(timeList == null){
timeList = new ArrayList<>();
}
timeList.add(h*60*60+m*60+s);
infos.put(name,timeList);
}
}
Set nameSet = infos.keySet();
List 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);
}
}
}