• 日志统计|2018年蓝桥杯B组题解析第八题-fishers


    标题:日志统计

    小明维护着一个程序员论坛。现在他收集了一份"点赞"日志,日志共有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

    资源约定:
    峰值内存消耗(含虚拟机) < 256M
    CPU消耗 < 1000ms

    请严格按要求输出,不要画蛇添足地打印类似:“请您输入...” 的多余内容。

    注意:
    main函数需要返回0;
    只使用ANSI C/ANSI C++ 标准;
    不要调用依赖于编译环境或操作系统的特殊函数。
    所有依赖的函数必须明确地在源文件中 #include
    不能通过工程设置而省略常用头文件。

    提交程序时,注意选择所期望的语言类型和编译器类型。

    思路:原来的代码有误,应该采用尺取法,现已改正。

    #include<iostream>
    #include<vector>
    #include<algorithm>
    using namespace std;
    int n,d,k,ts,id;
    vector<int> ve[1010];
    int ans[1010];
    
    int judge(int x){
        int len=ve[x].size();
        if(len<k){
            return 0;
        }
        sort(ve[x].begin(),ve[x].end());
        int l=0,r=0,sum=0;
        while(l<=r &&r<len){
            sum++;
            if(sum>=k){
    // 			满足条件 
                //时间间隔小于d
                if(ve[x][r]-ve[x][l]<d){
                    return 1;
                }
                else{
    //            	尺取法 ts左端点后移 点赞总数-1 
                    l++;sum--;
                }
            }
            r++;
        }
        return 0;
    }
    
    
    int main(){
        std::ios::sync_with_stdio(false);
        cin>>n>>d>>k;
        for(int i=1;i<=n;i++){
            cin>>ts>>id;
            ve[id].push_back(ts); //vector容器对应的id中加入新的ts 
        }
        int cnt=0;//记录最终热文的数量 
        for(int i=1;i<=n;i++){
            if(judge(i)){ //判断是否是热文 
                ans[++cnt]=i;
            }
        }
        for(int i=1;i<=cnt;i++){
            cout<<ans[i]<<endl;
        }
        
        return 0;
    }
    
    
    
  • 相关阅读:
    自定义Filter服务
    filter 以及 orderBy的使用
    ng-repeat-start ng-repeat-end 的使用
    ng-repeat 与ng-switch的简单应用
    ng-bind-html 的使用
    Oracle instr用法
    Oracle left查询案例
    Oracle case用法
    mysql 导出导入sql
    Gson解析复杂JSON对象
  • 原文地址:https://www.cnblogs.com/fisherss/p/10169099.html
Copyright © 2020-2023  润新知