2018年第九届蓝桥杯真题解析 | 日志统计【Python】

问题描述

小明维护着一个程序员论坛。现在他收集了一份"点赞"日志,日志共有 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)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值