在幻想乡中,蓬莱山辉夜是月球公主,居住在永远亭上,二次设定说她成天宅在家里玩电脑,亦称NEET姬
一天,她要她帮忙升级月球的网络服务器,应为注册用户过多(月兔和地球上的巫女都注册了……),所以作为代理管理员(俗称网管)的她,非常蛋疼。
注册用户格式:
TouhouMaiden 2004 200
其中前面的Touhoumaiden是预设,不做更改,第一个数是标识,第二个数是每次接受信息访问的间隔用时。
你要做的事,就是给定一群用户及n,求出这n次信息访问中,访问到了谁?
输入描述 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
思路:模拟就好了。
题解:
#include<iostream>
#include<cstdio>
#include<queue>
using namespace std;
struct cc{
int id,t,k;//id记录标示,t记录时间,k记录间隔
bool operator < (const cc b)const
{
if(t==b.t)
{
return id>b.id;//字典序小的优先
}
return t>b.t;//标示小的优先
}
};
priority_queue<cc>q;
int main()
{
string s;
while(cin>>s)
{
if(s=="#")
{
break;
}
int id,k;
scanf("%d%d",&id,&k);
cc x;
x.id=id,x.t=k,x.k=k;
q.push(x);
}
int n;
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
cc now=q.top();
q.pop();
printf("%d\n",now.id);
now.t+=now.k;
q.push(now);
}
return 0;
}