2830 蓬莱山辉夜

题目描述 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

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

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

本题描述有问题。题目中说:“若在一个时间有若干少女被访问到,输出字典序最小的那位少女的标识”,然而样例是按字典序全部输出

本题的意思:许多人排队等待被访问,他们每人都有一个编号(输入数据每一行的第一个数字),和一个时间,时间为等待时间(输入数据每一行的第二个数字)+已花费时间。他们排队的顺序为先按等待时间排序,若等待时间相同再按编号的字典序排序。然而每个人都想多次被访问,所以他们每次被访问完后,都会再去插队,再等待他们相应的等待时间再次被访问,访问完了之后再去插队……他们并不是老老实实的去排队,而是插队,插到等待时间+已花费时间比他还要长的人的前面。(也就是总时间少的人先被访问)

所以可以建立一个小根堆,每次取出堆中的第一个元素,输出编号,加上等待时间再放进堆里去,循环n次。

#include<iostream>
#include<cstdio>
#include<algorithm>
struct node
{
int a,b,c;//a编号,b已花费时间,c等待时间
}e[];
using namespace std;
int n,s,i,l[];//s堆heap中元素的个数,l用于存放时间相同的少女的编号
char c[];
node heap[];//堆
bool cmp(node k,node p)
{
return k.b<p.b;
}
void insert(node k)//向堆中加入元素
{
s++;
heap[s]=k;
int p=s;
while(p>&&k.b<heap[p/].b)
{
heap[p]=heap[p/];
p/=;
}
heap[p]=k;
}
void heapify(int k)//维护小根堆
{
int left=k*,right=k*+;
int minn=k;
if(left<=s) minn=heap[minn].b<heap[left].b ? minn:left;
if(right<=s) minn=heap[minn].b<heap[right].b ? minn:right;
if(minn!=k)
{
swap(heap[minn],heap[k]);
heapify(minn);
}
}
node get()//取出堆中第一个元素
{
node k=heap[];
heap[]=heap[s];
s--;
heapify();
return k;
}
int main()
{
cin>>c;
while(c[]!='#')
{
i++;
scanf("%d%d",&e[i].a,&e[i].b);
e[i].c=e[i].b;
insert(e[i]);
cin>>c;
}
scanf("%d",&n);
while(n)
{
bool ok=false;
node h=get();//取出堆中的第一个元素
int o=h.a;//这次要输出的元素的编号
int su=;//相同时间的少女的个数
while(h.b==heap[].b) //有少女在相同时间被访问到
{
ok=true;
l[++su]=h.a;//存进去
h.b+=h.c;//加上等待时间
insert(h);//再放回堆里
h=get();//再取出堆得第一个元素
o=min(o,h.a);
}
l[++su]=h.a;
h.b+=h.c;
insert(h);
//如过存在几个少女同一时间被访问到的情况,那根据上面的while,最后一个同一时间的少女没有取出来放入l数组,所以要加进去
//如果不存在几个少女同一时间被访问的情况,语句l[++su]=h.a执行没有影响,实际有作用的是后两句
if(ok)
{
sort(l+,l+su+);//按字典序输出
for(int i=;i<=su;i++)
printf("%d\n",l[i]);
n-=su;
continue;
}
printf("%d\n",o);//没有少女在同一时间被访问,直接输出编号
n--;
}
}

codevs 2830 蓬莱山辉夜的更多相关文章

  1. AC日记——蓬莱山辉夜 codevs 2830

    2830 蓬莱山辉夜  时间限制: 1 s  空间限制: 32000 KB  题目等级 : 黄金 Gold 题解  查看运行结果     题目描述 Description 在幻想乡中,蓬莱山辉夜是月球 ...

  2. codevs2830 蓬莱山辉夜

    2830 蓬莱山辉夜   题目描述 Description 在幻想乡中,蓬莱山辉夜是月球公主,居住在永远亭上,二次设定说她成天宅在家里玩电脑,亦称NEET姬一天,她要她帮忙升级月球的网络服务器,应为注 ...

  3. Codevs堆练习

    Codevs堆练习 黄金:2830.2879.2995.3110 钻石:1052.1063.1245.1246.2057.2573.3377 大师:1021.1765.2069.2913.3032

  4. codevs 3289 花匠

    题目:codevs 3289 花匠 链接:http://codevs.cn/problem/3289/ 这道题有点像最长上升序列,但这里不是上升,是最长"波浪"子序列.用动态规划可 ...

  5. codevs 1082 线段树练习 3(区间维护)

    codevs 1082 线段树练习 3  时间限制: 3 s  空间限制: 128000 KB  题目等级 : 大师 Master 题目描述 Description 给你N个数,有两种操作: 1:给区 ...

  6. codevs 1285 二叉查找树STL基本用法

    C++STL库的set就是一个二叉查找树,并且支持结构体. 在写结构体式的二叉查找树时,需要在结构体里面定义操作符 < ,因为需要比较. set经常会用到迭代器,这里说明一下迭代器:可以类似的把 ...

  7. codevs 1576 最长上升子序列的线段树优化

    题目:codevs 1576 最长严格上升子序列 链接:http://codevs.cn/problem/1576/ 优化的地方是 1到i-1 中最大的 f[j]值,并且A[j]<A[i] .根 ...

  8. codevs 1080 线段树点修改

    先来介绍一下线段树. 线段树是一个把线段,或者说一个区间储存在二叉树中.如图所示的就是一棵线段树,它维护一个区间的和. 蓝色数字的是线段树的节点在数组中的位置,它表示的区间已经在图上标出,它的值就是这 ...

  9. codevs 1228 苹果树 树链剖分讲解

    题目:codevs 1228 苹果树 链接:http://codevs.cn/problem/1228/ 看了这么多树链剖分的解释,几个小时后总算把树链剖分弄懂了. 树链剖分的功能:快速修改,查询树上 ...

随机推荐

  1. Linux平台oracle 11g单实例 + ASM存储 安装部署 快速参考

    操作环境:Citrix虚拟化环境中申请一个Linux6.4主机(模板)目标:创建单机11g + ASM存储 数据库 1. 主机准备 2. 创建ORACLE 用户和组成员 3. 创建以下目录并赋予对应权 ...

  2. iOS 调试工具

    仪表  xcode5 引入了调试仪表,通过仪表可以直观的看出应用的CPU和内存占用量.运行一个程序,点击仪表栏.可以发现当程序处于运行状态时,调试导航面板会以柱状图显示CPU和内存占用量,并随着应用实 ...

  3. C#基础知识六之委托(delegate、Action、Func、predicate)

    1. 什么是委托 官方解释 委托是定义方法签名的类型,当实例化委托时,您可以将其实例化与任何具有兼容签名的方法想关联,可以通过委托实例调用方法. 个人理解 委托通俗一点说就是把一件事情交给别人来帮助完 ...

  4. C#设计模式之简单工厂模式(Simple Factory)

    1. 概述 简单工厂模式就是将一个类的实例化交给一个静态工厂来执行. 2. 使用频率 中 3. 模式结构 3.1 机构图 3.2 模式中的角色 Product:抽象类,把具体产品类公共的代码进行抽象和 ...

  5. Razor语法中绑定一个值给checkbox

    在ASP.NET MVC开发中,需要绑定一个值给checkbox标签,如下面写法,它们运行时是没有问题,照样能跑. 看看上面的语法,在绑定时,它却出现绿浪线.提不绑定的值is not a valid ...

  6. C++智能指针

    引用计数技术及智能指针的简单实现 基础对象类 class Point { public: Point(int xVal = 0, int yVal = 0) : x(xVal), y(yVal) { ...

  7. 是时候 UWP 了 !

    什么是 UWP? 很多程序员都有一个梦想:希望自己开发的软件能够轻而易举的在所有平台上运行,而不是把同样的需求,用不同的技术.工具重新开发才能够运行在所有平台上.这就是跨平台,很多软件从业者都在为这个 ...

  8. 2017Windows下安装pip

    -------------------------------------------- 下载地址:  https://pypi.python.org/pypi/pip#downloads 下载颜色那 ...

  9. 如何实现一个php框架系列文章【4】url路由管理

    直接通过url参数访问业务模块($app)中控制器($ctl)里的函数($act) 我们支持3种路由模式 普通模式 _a=$app,     _u=$ctl.$act 最简单的方式,专注实现业务$ac ...

  10. JS阻止事件冒泡

    在使用JS事件的时候,外层元素事件有可能被里层元素的事件触发,例如点击里层元素外层也触发了点击,这种现象称为事件冒泡.(李昌辉) <div id="wai"> < ...