描述
對於川農牛的真實身份,目前已經有了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);
}
}
}
