zoukankan      html  css  js  c++  java
  • codevs2830 蓬莱山辉夜

     
    题目描述 Description

    在幻想乡中,蓬莱山辉夜是月球公主,居住在永远亭上,二次设定说她成天宅在家里玩电脑,亦称NEET姬
    一天,她要她帮忙升级月球的网络服务器,应为注册用户过多(月兔和地球上的巫女都注册了……),所以作为代理管理员(俗称网管)的她,非常蛋疼。
    注册用户格式:
    TouhouMaiden 2004 200
    其中前面的Touhoumaiden是预设,不做更改,第一个数是标识,第二个数是每次接受信息访问的间隔用时。
    你要做的事,就是给定一群用户及n,求出这n次信息访问中,访问到了谁?

    presented by Izayoi sakuya

    输入描述 Input Description

    以题目预设格式输入,另起一行以‘#’结束,在其一行输入n

    输出描述 Output Description

    n行,每行输出第行次后,信息访问到了谁?若在一个时间有若干少女被访问到,输出字典序最小的那位少女的标识

    样例输入 Sample Input
    TouhouMaiden 2004 200
    TouhouMaiden 2005 300
    #
    5
    样例输出 Sample Output
    2004
    2005
    2004
    2004
    2005
    数据范围及提示 Data Size & Hint

    标识和每次信息访问间隔均在integer内,n<=10000

    原本是要用到堆,但深搜+时间即可搞定

    数据有点少但也都够变态了

    以时间为关键字将每个用户压入堆

    每次输出最先被访问到的用户,

    并把时间加上他的时间间隔再重新压入堆。

    具体做法是。定义优先队列,把时间最短、序号最小作为优先级,且时间比序号更优先。向优先队列中插入元素,于是形成了一个小根堆,要求的值就是堆顶元素的标识。

    如何再求下一个,下下个?我们知道,题目中的时间是累加的,且每个用户被访问后都有一个间隔时间,也就是说,下一个要访问这个用户的话一定会在这个时间段之后,就把他相对初始时的时间改为累加后的和,t.time=t.tme+t.cur,当然,这个式子中的t.cur就是这个用户被访问后的间隔时间,t.time在累加之中,表示他是在从刚开始数的哪个时刻被访问。

    #include<iostream>
    #include<queue>
    #include<vector>
    using namespace std;
    struct node{
        int id,time,cur;
    }them[100000];
    struct cmp_node{
        bool operator()(node &a,node &b)
        {
            if(a.time!=b.time)
            {return a.time>b.time;}
            else
            {return a.id>b.id;}
            return false;
        }
    };
    priority_queue<node,vector<node>,cmp_node>heap;
    int n;
    int main()
    {
        string s;
        cin>>s;
        int i=0;
        while(s!="#")
        {
            i++;
            cin>>them[i].id>>them[i].time>>s;
            them[i].cur=them[i].time;
            heap.push(them[i]);
        }
        cin>>n;
        for(int i=1;i<=n;i++)
        {
            node t=heap.top();
            heap.pop();
            cout<<t.id<<endl;
            t.time=t.time+t.cur;
            heap.push(t);
        }
    }
  • 相关阅读:
    UDP协议测试
    openstack ussusi ubuntu 20 centos8 dracut initqueue timeout
    wol linux远程通过数据帧自动开机
    openStack proformancee bottlenecks options optimized
    find 搜索排除搜索目录
    Ipv6
    golang学习笔记 ---日志库 logrus
    golang学习笔记---- 格式化IO
    golang学习笔记 --- struct 嵌套
    golang学习笔记---HTTPS
  • 原文地址:https://www.cnblogs.com/thmyl/p/6238746.html
Copyright © 2011-2022 走看看