当前位置: 首页 > news >正文

第九届蓝桥杯省赛 C++ B组 - 日志统计

✍个人博客:https://blog.csdn.net/Newin2020?spm=1011.2415.3001.5343
📚专栏地址:蓝桥杯题解集合
📝原题地址:日志统计
📣专栏定位:为想参加蓝桥杯的小伙伴整理常考算法题解,祝大家都能取得理想成绩!
❤️如果有收获的话,欢迎点赞👍收藏📁,您的支持就是我创作的最大动力💪

问题描述

小明维护着一个程序员论坛。现在他收集了一份”点赞”日志,日志共有 N 行。

其中每一行的格式是:

ts id  

表示在 ts 时刻编号 id 的帖子收到一个”赞”。

现在小明想统计有哪些帖子曾经是”热帖”。

如果一个帖子曾在任意一个长度为 D 的时间段内收到不少于 K 个赞,小明就认为这个帖子曾是”热帖”。

具体来说,如果存在某个时刻 T 满足该帖在 [T,T+D) 这段时间内(注意是左闭右开区间)收到不少于 K 个赞,该帖就曾是”热帖”。

给定日志,请你帮助小明统计出所有曾是”热帖”的帖子编号。

输入格式

第一行包含三个整数 N,D,K。

以下 N 行每行一条日志,包含两个整数 ts 和 id。

输出格式

按从小到大的顺序输出热帖 id。

每个 id 占一行。

数据范围

1≤K≤N≤105,
0≤ts,id≤105,
1≤D≤10000

输入样例:

7 10 2
0 1
0 10
10 10
10 1
9 1
100 3
100 3

输出样例:

1
3

思路

具体思路如下:

  1. 将输入的日志按照时间从小到大进行排序。
  2. 枚举每一条日志,用一个数组 cnt 来记录当前时间间隔内每个 id 的点赞数。同时将已经不在热度规定时间间隔内的帖子减去相应的点赞,保证 cnt 中记录的点赞数是在时间间隔内的。如果在热度规定的时间间隔内点赞数大于等于 k,则在 st 中标记该 id 为热帖即标记为 true。
  3. 遍历 st 数组,如果为 true 则输出相应的 id。
    我们举个例子,假设 n=7, d=5, k=3,看一看该过程的中间部分:

可以发现当时间窗口长度刚好为 5 时,id 为 1 的帖子满足了热帖的要求,所以在 st 中将其标记为热帖。然后我们继续往后操作即 i 继续增加,发现时间窗口长度超过了 5,故需要将 j 往后移动,同时修改 cnt 中对应的值。

代码

#include<bits/stdc++.h>
using namespace std;typedef pair<int, int> PII;
const int N = 100010;
int n, d, k;
PII logs[N];
int cnt[N];
bool st[N] = { 0 };int main()
{cin >> n >> d >> k;for (int i = 0; i < n; i++)scanf("%d%d", &logs[i].first, &logs[i].second);//按照时间从小到大排序sort(logs, logs + n);//按照时间从小到大枚举日志for (int i = 0, j = 0; i < n; i++){int id = logs[i].second;cnt[id]++;	//当前id点赞数加一//减去已经在规定热度时间间隔之外的id点赞while (logs[i].first - logs[j].first >= d){cnt[logs[j].second]--;j++;}//如果该时间间隔内点赞数已经大于等于k,则记录该热帖if (cnt[id] >= k)   st[id] = true;}//输出热帖idfor (int i = 0; i <= 100000; i++)if (st[i])printf("%d\n", i);return 0;
}
http://www.lryc.cn/news/18573.html

相关文章:

  • 记一次服务器入侵事件的应急响应
  • 作用域链查找机制(回顾)
  • 前端基础之HTML扫盲
  • 大规模食品图像识别:T-PAMI 2023论文解读
  • 【java】Spring Cloud --Spring Cloud Alibaba RocketMq 异步通信实现
  • 玫瑰花变蚊子血,自动化无痕浏览器对比测试,新贵PlayWright Vs 老牌Selenium,基于Python3.10
  • Spring Cloud入门篇 Hello World | Spring Cloud 1
  • C++学习笔记-数据结构
  • 【C++的OpenCV】第五课-OpenCV图像常用操作(二):OpenCV的基本绘图、平滑滤波(模糊)处理
  • [SSD固态硬盘技术 19] 谁是数据的守护神? 盘内RAID1/RAID5图文详解_盘内数据冗余保护
  • linux相对于windows环境为啥相对来说更加具有安全性
  • iOS开发笔记之九十七——关于Restful API的一些总结
  • Linux系统Nginx下载和安装
  • 交叉编译 acl
  • wait/notify方法 等待唤醒机制
  • c++笔记之构造函数中的default作用
  • 【代码随想录二刷】Day24-回溯-C++
  • Kubernetes中YAML 文件简介
  • 骨传导耳机是怎么发声的,骨传导耳机值得入手嘛
  • 会声会影2023官方新功能介绍
  • vue:pdf.js使用细节/隐藏按钮/设置、获取当前页码/记录阅读进度/切换语言(国际化)
  • RocketMQ实现延迟队列精确到秒级实现
  • 线性数据结构:数组 Array
  • 大数据开发-Hive
  • 《程序员新声》-Tech Lead 如何带领团队
  • 每日算法面试题
  • 高质量前端之自动化测试
  • 2023不伤人脉的全新商城分销,一劳永逸的消费分红
  • 【代码随想录训练营】【Day21】第六章|二叉树|530.二叉搜索树的最小绝对差|501.二叉搜索树中的众数|236. 二叉树的最近公共祖先
  • leaflet 导出图片,打印图片(A4横版或竖版)