第九届蓝桥杯省赛第八题(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());
}
}
}
标签:java,scanner,int,蓝桥,nextInt,热帖,map01,new,省赛 来源: https://blog.csdn.net/double_sweet1/article/details/89297700