日志统计【省赛】
发布日期:2022-07-08 02:55:55 浏览次数:55 分类:技术文章

本文共 1318 字,大约阅读时间需要 4 分钟。

日志统计

题目:

小明维护着一个程序员论坛。现在他收集了一份"点赞"日志,日志共有N行。其中每一行的格式是:

ts id

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

现在小明想统计有哪些帖子曾经是"热帖"。如果一个帖子曾在任意一个长度为D的时间段内收到不少于K个赞,小明就认为这个帖子曾是"热帖"。

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

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

输入格式
第一行包含三个整数N、D和K。
以下N行每行一条日志,包含两个整数ts和id。

对于50%的数据,1 <= K <= N <= 1000

对于100%的数据,1 <= K <= N <= 100000 0 <= ts <= 100000 0 <= id <= 100000
输出格式
按从小到大的顺序输出热帖id。每个id一行。
样例输入:

7 10 2

0 1
0 10
10 10
10 1
9 1
100 3
100 3
样例输出
1
3

代码:

#include
using namespace std;const int N = 100001;struct node {
int id, time;};node p[N];int n, d, k;bool check(int start, int e) {
if (e - start + 1 < k) return false; for (int i = start; i <= e - k + 1; i++) {
if (p[i].time + d > p[i + k - 1].time) return true; } return false;}bool cmp(node a, node b) {
if (a.id != b.id) return a.id < b.id; else return a.time < b.time;}int main() {
cin >> n >> d >> k; for (int i = 0; i < n; i++) {
cin >> p[i].time >> p[i].id; } sort(p, p + n, cmp); int i = 0; while (i < n) {
int id = p[i].id; int start = i, e; while (id == p[i].id && i < n) {
e = i; i++; } if (check(start, e)){
cout << id << endl; } } return 0;}

转载地址:https://blog.csdn.net/CRH1129/article/details/123999633 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:日志记录工具 C++ linux
下一篇:日志系统代码

发表评论

最新留言

哈哈,博客排版真的漂亮呢~
[***.90.31.176]2024年03月22日 16时43分40秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章