sicau OJ (川農牛,是學生)題目,附java AC代碼


川農牛,是學生
 
這是四川農業大學OJ上的一道題目,AC率較低,這里給出我的代碼,供大家交流學習。

 

描述

 

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

1N≤10^5

字符串長度不超過10位由阿拉伯數字和小寫字母組成,其中字母s打頭的代表是VIP用戶

00:00:00T23: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語句

Hash table

Map

請復習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);
        }

    }

}

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM