Acwing---1238.日志统计

news2024/11/26 13:24:22

日志统计

  • 1.题目
  • 2.基本思想
  • 3.代码实现

1.题目

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

其中每一行的格式是:

ts id  

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

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

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

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

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

输入格式
第一行包含三个整数 N , D , K N,D,K N,D,K

以下 N N N 行每行一条日志,包含两个整数 t s ts ts i d id id
输出格式
按从小到大的顺序输出热帖 i d id id

每个 i d id id 占一行。

数据范围
1 ≤ K ≤ N ≤ 105 1≤K≤N≤105 1KN105,
0 ≤ t s , i d ≤ 105 0≤ts,id≤105 0ts,id105,
1 ≤ D ≤ 10000 1≤D≤10000 1D10000

输入样例:

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

输出样例:

1
3

2.基本思想

暴力做法:如果用暴力的话我们应该枚举两重循环,一重枚举时间,一重枚举id

暴力伪代码

for (时间段) {
    for (id) {
        cnt[id]++;
        
        //判断区间是否满足D
        
        if (cnt[id] >= k) st[id] = ture; // 如果是热帖 标记为true
    }
}
  • 由于枚举区间时,会有很大一部分重复,假设我们已经统计了上面区间的id次数,那我统计下面区间id次数,我们可以直接把开头去掉,把结尾加上即可:
    在这里插入图片描述
    cnt[id[j]]--cnt[id[i]]++

基本思想:排序+双指针

① 先将所有的点赞👍数量按照时间🕛顺序排好

② 通过双指针i和j维护长度不大于d的区间,并记录该区间的中所有帖子获得的赞数

for (时间段) {
    cnt[id[j]]--; // 减去开头
    cnt[id[i]]++; // 加上结尾
}

3.代码实现

import java.util.Arrays;
import java.util.Scanner;

public class _1238日志统计 {
    static class PII implements Comparable<PII> {
        int ts, id;

        public PII(int ts, int id) {
            this.ts = ts;
            this.id = id;
        }

        @Override
        public int compareTo(PII o) {
            if (this.ts > o.ts) return 1;
            if (this.ts == o.ts) {
                if (this.id > o.id) return 1;
                else return -1;
            }
            return -1;
        }
    }

    static Scanner sc = new Scanner(System.in);
    static PII logs[] = new PII[100010];//保存 记录
    static int cnt[] = new int[100010];//用来记录一个id号获得的赞数,表示形式为cnt[id]++;
    static boolean st[] = new boolean[100010];//用来标记id号,因为id <= 1e5,所以可以利用遍历来输出。

    public static void main(String[] args) {
        int N = sc.nextInt(), D = sc.nextInt(), K = sc.nextInt();//N行数据 时间长度为D 不少于K个赞
        for (int i = 0; i < N; i++)
            logs[i] = new PII(sc.nextInt(), sc.nextInt());
        Arrays.sort(logs, 0, N);//按时间 排序处理

        //双指针算法  i走的块 j在后面跟着
        for (int i = 0, j = 0; i < N; i++) {
            int i_id = logs[i].id;//表示i时刻的id号
            cnt[i_id]++;

            while (logs[i].ts - logs[j].ts >= D) {//两指针跨越时间超过D 去除早期 赞的记录
                cnt[logs[j].id]--;
                j++;//后移遍历
            }

            if (cnt[i_id] >= K) st[i_id] = true;//记录i_id 是否为 热赞
        }

        for (int i = 0; i < 100010; i++)
            if (st[i]) System.out.println(i);
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/180996.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

一起自学SLAM算法:9.3 SVO算法

连载文章&#xff0c;长期更新&#xff0c;欢迎关注&#xff1a; 下面将从原理分析、源码解读和安装与运行这3个方面展开讲解SVO算法。 9.3.1 SVO原理分析 前面已经说过&#xff0c;SVO算法是半直接法的典型代表。因此在下面的分析中&#xff0c;首先介绍一下半直接法的基本原…

网络攻防中监控某个IP的流量和数据分析

网络攻防中监控某个IP的流量和数据分析。 Windows 可以使用 tcpview 工具监控某个IP的流量信息&#xff0c;Linux 可以使用iftop 工具。 新版本的 tcpview 带过滤功能&#xff0c;可以对 IP 进行过滤。最后两列显示的是对应程序发送和接收的字节数。 tcpview 工具下载地址&am…

【Quicker】您的指尖工具箱

在日常学习和工作中我们常常用到各种各样的小工具&#xff0c;比如&#xff1a;截图并编辑、取色、文字识别、公式识别等等.   倘若这每一项功能都下载一个程序&#xff0c;则会显得非常冗杂。因此&#xff0c;用一个工具箱将这些功能集合起来&#xff0c;则是一个不错的解决…

机器自动翻译古文拼音 - 十大宋词 - 满江红 怒发冲冠 南宋·岳飞

满江红 怒发冲冠 南宋岳飞 怒发冲冠&#xff0c;凭栏处&#xff0c;潇潇雨歇。 抬望眼&#xff0c;仰天长啸&#xff0c;壮怀激烈。 三十功名尘与土&#xff0c;八千里路云和月。 莫等闲&#xff0c;白了少年头&#xff0c;空悲切。 靖康耻&#xff0c;犹未雪。臣子恨&#x…

点云 3D 分割 - RangeNet++(IROS 2019)

点云 3D 分割 - RangeNet&#xff08;IROS 2019&#xff09;摘要1. 引言2. 相关工作3. 我们的方法A. 距离图像点云代理表示B. 完全卷积语义分割C. 基于距离图像的点云重建D. 高效点云后处理4. 实验评价A. RangeNet相对于最新技术的性能B. 消融研究C. 后处理影响D. 运行时5. 结论…

JavaWeb | 预编译SQL及PreparedStatement讲解

本专栏主要是记录学习完JavaSE后学习JavaWeb部分的一些知识点总结以及遇到的一些问题等&#xff0c;如果刚开始学习Java的小伙伴可以点击下方连接查看专栏 本专栏地址&#xff1a;&#x1f525;JDBC Java入门篇&#xff1a; &#x1f525;Java基础学习篇 Java进阶学习篇&#x…

JavaSE总结

JavaSE目录初识JavaJava由来main 方法介绍Java程序的运行数据类型和变量数据类型基本数据类型引用数据类型运算符算术运算符关系运算符逻辑运算符移位运算逻辑控制方法方法的重载与重写关于递归数组二维数组类和对象成员变量成员方法对象this 关键字构造方法封装代码块内部类非…

ext文件系统

Ext文件系统 1.文件目录 1.1 文件控制块FCB 文件系统通过文件控制块&#xff08;File Control Blcok&#xff09;来维护文件结构&#xff0c;FCB包含有关文件的信息&#xff0c;包括所有者、权限、文件内容的位置等文件目录用于组织文件&#xff0c;每个目录项对应一个FCB文…

(考研湖科大教书匠计算机网络)第三章数据链路层-第三节:差错控制

专栏目录首页&#xff1a;【专栏必读】考研湖科大教书匠计算机网络笔记导航 文章目录一&#xff1a;检错编码&#xff08;1&#xff09;奇偶校验码&#xff08;2&#xff09;循环冗余检验码&#xff08;CRC&#xff09;二&#xff1a;纠错编码&#xff08;海明校验码&#xff0…

Opencv调参神器——trackBar控件

Opencv调参神器——trackBar控件 调参需求介绍trackBar控件介绍trackBar控件使用函数案例一:trackBar控件调整图片颜色案例二:trackBar控件调整Canny算子参数案例三:trackBar控件调整图像融合参数trackBar控件总结调参需求介绍 想要学好计算机视觉,有一个库必不可少,那就…

ARM Makefile 基础

一、Makefile 的作用和意义 (1) 工程项目中 c 文件太多管理不方便&#xff0c;因此用 Makefile 来做项目管理&#xff0c;方便编译链接过程。 (2) uboot 和 linux kernel本质上都是 C 语言的项目&#xff0c;都由很多个文件组成&#xff0c;因此都需要通过 Makefile 来管理。…

nodejs小区物业管理系统vue前端

目 录 1 概述 1 1.1课题背景及意义 1 1.2 国内外研究现状 1 1.3 本课题主要工作 2 2 系统开发环境 3 前端技术&#xff1a;nodejsvueelementui 前端&#xff1a;HTML5,CSS3、JavaScript、VUE 1、 node_modules文件夹(有npn install产生) 这文件夹就是…

STM32-Modbus-RTU-01-05-15功能码补充-波特率在线修改-断电数据保护

文章目录一、本文主要内容二、使用modbus通信协议在线修改STM32波特率&#xff08;一&#xff09;STM32标准库在线修改串口波特率&#xff08;二&#xff09;STM32HAL库-485-modbus-rtu通信在线修改串口波特率1、STM32F103ZET6芯片(1)HAL库下参考标准库形式修改波特率(2)直接修…

SNARK+深度神经网络

1. 引言 SNARK深度神经网络&#xff0c;相关开源实现有&#xff1a; 1&#xff09;Ezkl&#xff08;Rust&#xff09;&#xff1a;借助Halo2证明系统&#xff0c;实现了50层的MobileNetV2的执行证明。具体见Daniel Kang等人2022年论文Scaling up Trustless DNN Inference with…

4种I/O模型简介

目录 1、同步阻塞IO(BIO) 2、同步非阻塞IO(NIO) 3、多路复用IO 3.1、select(轮询) 3.2、poll(轮询) 3.3、epoll(事件驱动) 3.4、select、poll、epoll总结 4、异步IO模型(AIO) 网络IO涉及的两个对象&#xff1a;用户线程 系统内核。 当一个read发生时&#xff0c;会经…

Kotlin中嵌套类、数据类、枚举类和密封类的详解

博主前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住也分享一下给大家 &#x1f449;点击跳转到教程 一、嵌套类 如果一个类只对另一个类有用&#xff0c;那么将其嵌入到该类中并使这两个类保持在一起是合乎逻辑的&#xf…

【Deepstream学习】TX1 跑demo

大家好&#xff0c;我是虎哥&#xff0c;使用NVIDIA Jeston TX1 也有很长一段时间了&#xff0c;由于这是基本停产的一个模块&#xff0c;其实自己也担心有很多官方的demo无法适配跑起来了&#xff0c;所以花了点时间&#xff0c;进一步研究发挥其GPU性能&#xff0c;使用各种硬…

STM8S207时钟管理库函数

STM8S207时钟树 //STM8S207时钟管理库函数 //CLK_DeInit();//将相关的时钟寄存器恢复到默认值 //CLK_HSECmd(ENABLE);//启用外部高速振荡器HSE //CLK_HSECmd(DISABLE);//关闭外部高速振荡器HSE //CLK_HSICmd(ENABLE);//启用内部高速振荡器HSI //CLK_HSICmd(DISABLE)//关闭内部高…

Spring Cloud Sentinel(限流、熔断、降级)、SpringBoot整合Sentinel、Sentinel的使用-60

一&#xff1a;Sentinel简介 Sentinel就是分布式系统的流量防卫兵 随着微服务的流行&#xff0c;服务和服务之间的稳定性变得越来越重要。Sentinel 以流量为切入点&#xff0c;从流量控制、熔断降级、系统负载保护等多个维度保护服务的稳定性。 1.1 官方文档 官方文档&#…

哪里可以找到电子版的大学课本?

第一个&#xff1a;中国高校课件下载网站网址&#xff1a;http://download.cucdc.com/这是一个可以下载各个大学课本的网站&#xff0c;基本上所有的大学课本都能在这里找到PDF版本。可以按学校学科搜。 第二个&#xff1a;淘链客网址&#xff1a;https://www.toplinks.cc/s/PD…