【模拟】桐桐的新闻系统

题目描述

桐桐为期末的电脑作业设计一套新闻系统,他把这套系统称为Argus。
使用这套系统的用户可以向这套系统注册,然后这套系统就会以用户要求发送新闻的时间间隔向用户发送一次新闻。
向Argus注册的指令具有一下格式:
Register Q_num Period
Q_num(0 用户都有不同的Q_num。桐桐测试了一段时间后,想知道系统前K次发送给谁新闻了。如果同一时间发送多个新闻,以Q_num的升序排列。

输入

第一部分是注册指令,每行一条。指令数不超过1000,所有指令同时执行完,此部分以‘#’结束;第二部分仅一行,一个正整数K(K≤10000)。

输出

输出前K个新闻发送到的用户的Q_num,每行一个。

输入样例
Register 2004 200
Register 2005 300
#
5
输出样例
2004
2005
2004
2004
2005

思路

模拟
详细见代码

#include
#include
#include
#include
#include
using namespace std;
struct Argus
{
	int User,Num;
}A[300250];
int n,m,k,l,r;
string s;
bool Nm(Argus i,Argus j)
{return i.User<j.User;}
int main()
{
	getline(cin,s);
	m=0;
	while(s!="#")//读入
	{
		n++;
		s=' '+s;
		l=9;
		A[n].User=A[n].Num=0;
		while(s[++l]!=' ')
			A[n].User=A[n].User*10+(s[l]-'0');
		while(++l<s.length())
			A[n].Num=A[n].Num*10+(s[l]-'0');
			getline(cin,s);
	}
	scanf("%d",&k);
	sort(A+1,A+n+1,Nm);//对名字进行排下序
	l=0,r=0;//l为时间,r为发送了多少条新闻
	while(r<k)
	{
		++l;
		for(int i=1;i<=n && r<k;++i)//枚举所有的用户
		//记得加r
			if(l%A[i].Num==0)
			{
				printf("%d\n",A[i].User);
				++r;
				
			}
	}
	return 0;
}

你可能感兴趣的:(模拟,模拟赛)