问题描述
小明维护着一个程序员论坛。现在他收集了一份"点赞"日志,日志共有 N 行。其中每一行的格式是:
ts id
表示在 ts 时刻编号 id 的帖子收到一个"赞"。
现在小明想统计有哪些帖子曾经是"热帖"。如果一个帖子曾在任意一个长度为 D 的时间段内收到不少于 K 个赞,小明就认为这个帖子曾是"热帖"。
具体来说,如果存在某个时刻 T 满足该帖在 [T,T+D) 这段时间内(注意是左闭右开区间)收到不少于 K 个赞,该帖就曾是"热帖"。
给定日志,请你帮助小明统计出所有曾是"热帖"的帖子编号。
个人思路
代码如下
import os
import sys
'''
题意:
①输入三个数:日志个数N,时间间隔D,赞K
②统计热帖
思路:字典
1、处理数据:将N行数据处理成字典类型:id:出现时刻
2、统计每一个id下,在d~d+D的时间段上,收到的赞个数
3、超过K个,则存入列表ans
例子:
7 10 2
0 1
0 10
10 10
10 1
9 1
100 3
100 3
'''
def check(D,K,ts_):
for x in ts_:
count = 0
for y in ts_:
if x <= y < x+D:
count += 1
if count >= K:
return True
return False
N, D, K = map(int,input().split())
d = dict()
#将N行数据存储为字典模式:里面数据id:时刻
# {1: [0, 10, 9], 10: [0, 10], 3: [100, 100]}
for _ in range(N):
ts,ids = map(int,input().split())
d[ids] = d.get(ids,[]) +[ts]
print(d)
ans = [] #存储热帖id
# dict_items([(1, [0, 10, 9]), (10, [0, 10]), (3, [100, 100])])
for j in d.items():
ids, ts_ = (i for i in j)
ts_ = sorted(ts_)
if check(D,K,ts_):
ans.append(ids)
for i in sorted(ans):
print(i)