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