SJTU排队与插队

排队与插队

春节前后的寒假开始总是交通高峰期的开始。如果您这时候尝试购买火车票,就会目睹每个售票窗口前无尽的排队。如果一个人在队列中见过他的朋友,那么这个幸运的人很可能会直接去找他的朋友求情。这称为“插队”。对于排队的其他人来说,这是不公平的,但这就是生活。

您的任务是编写一个程序,模拟一个这样的队列,人们不时地排队与插队。队伍中如果存在自己的小团体,则会插在这个小团体末尾。否则正常排队,排在整条队伍末尾。

Input Format
第一行是一个数n,表示参与排队的人的个数。

第二行将会读入n个非负整数,第 i 个整数表示第 i 个人所属的团体的 编号 。这些编号的范围是1~9。

第三行是一个数q,代表可能的事件数。

第四行是q个数字,每个数字代表一种可能的事件。

0: 插入一个新人。如果所有人都入过队列,你应当忽略这个操作。

1: 队首的人离开,请输出这个人的编号(他是第几个插入的)。如果队列空,你应当输出"-1"。

Output Format
对于每一个询问类事件,输出对应的答案或者是"-1"。
Sample Input
7
1 2 1 2 2 1 1
7
1 0 0 0 0 1 1
Sample Output
-1
1
3
Limits
对于100%的数据,n, q <= 4000

#include<iostream>
template <class T>
class linkQueue
{
   
private:
	struct node {
   
		T data;
		int a;//a为第几个,data为团体标志数
		node*next;
		node() :next(NULL) {
   }
		node(const T&x,const int&y, node*N = NULL)
		{
   
			data = x;
			a = y;
			next=N;
		}
		~node(){
   }
	};
	node*front, *rear;
public:
	linkQueue();
	~linkQueue();
	bool isEmpty()const;
	void enQueue(
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值