第九屆藍橋杯省賽第八題(java)

/*

標題:日誌統計

小明維護着一個程序員論壇。現在他收集了一份"點贊"日誌,日誌共有N行。其中每一行的格式是:

ts id  

表示在ts時刻編號id的帖子收到一個"贊"。  

現在小明想統計有哪些帖子曾經是"熱帖"。如果一個帖子曾在任意一個長度爲D的時間段內收到不少於K個贊,小明就認爲這個帖子曾是"熱帖"。  

具體來說,如果存在某個時刻T滿足該帖在[T, T+D)這段時間內(注意是左閉右開區間)收到不少於K個贊,該帖就曾是"熱帖"。  

給定日誌,請你幫助小明統計出所有曾是"熱帖"的帖子編號。

*/

import java.util.*;

import static java.util.Collections.sort;

public class test08 {
    public static void main(String args[]) {
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();//日誌的行數
        int d = scanner.nextInt();//時間間隔
        int k = scanner.nextInt();//熱詞的最低頻率
        int a[] = new int[n];//時間的數組
        int b[] = new int[n];//帖子的編號
        Map<Integer, Integer> map01 = new HashMap<Integer, Integer>();//統計k
        Map<Integer, Integer> map02 = new HashMap<Integer, Integer>();//判斷是否是熱帖
        List<Integer> e = new ArrayList<Integer>();
        a[0] = scanner.nextInt();
        b[0] = scanner.nextInt();
        map01.put(b[0], 1);
        map02.put(b[0], a[0]);
        for (int i = 1; i < n; i++) {
            a[i] = scanner.nextInt();
            b[i] = scanner.nextInt();
            if (map01.containsKey(b[i])) {
                int time = map02.get(b[i]);
                if (a[i] - time < d) {//如果在熱帖規定的範圍內
                    int count = map01.get(b[i]);
                    map01.put(b[i], count+1);
                }
            } else {
                map01.put(b[i], 1);
                map02.put(b[i], a[i]);
            }
        }
        System.out.println();
        Set<Integer> set = map01.keySet();
        Iterator<Integer> it = set.iterator();
        while (it.hasNext()) {
            int key = it.next();
            if (map01.get(key) >= k) {
                e.add(key);
            }
        }
        sort(e);
        Iterator w = e.iterator();
        while (w.hasNext()) {
            System.out.println(w.next());
        }

    }
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章