codevs 2830 蓬莱山辉夜

此编程挑战涉及为月球公主蓬莱山辉夜升级网络服务器,通过使用优先级队列来模拟用户访问并确定特定时刻哪些用户会被访问到。任务要求实现一个算法来跟踪用户访问序列。

传送门

2830 蓬莱山辉夜

 时间限制: 1 s
 空间限制: 32000 KB
 题目等级 : 黄金 Gold
 
 
题目描述  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

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

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

【思路】

每次访问之后将他的时间+他的访问间隔插入堆中。

模拟数据就能知道大体的过程。

【code】

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<queue>
using namespace std;
int n,id,wait;
string s;
struct Per
{
    int id,t,wait;
    bool operator < (const Per b) const
    {
        if(t==b.t)return id>b.id;
        return t>b.t;
    }
};
priority_queue<Per>q;
int main()
{
    cin>>s;
//    while(scanf("%s",s)&&s[0]!='#')
    while(s[0]!='#')
    {
        scanf("%d%d",&id,&wait);
        {
            Per x;
            x.id =id;x.wait=wait;x.t=wait;
            q.push(x);
        }
        cin>>s;
    }
    scanf("%d",&n);
    for(int i=1;i<=n;i++)
    {
        Per y=q.top();q.pop();
        printf("%d\n",y.id);
        y.t+=y.wait;
        q.push(y);
    }
    return 0;
}

 

转载于:https://www.cnblogs.com/zzyh/p/6970711.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值