福大数据结构与算法实验题 Who is behind(双端队列)

原创 2013年12月03日 13:23:49
★实验任务
开学了,有 N 个新生需要排成一列。这 N 个新生编号从 1 到 N,为了排队方便,按编号
从 1 到 N 顺序入队伍,起始队伍为空,每个人进队伍的选择有两种,一种是直接排在当前队
伍的最前面,一种是排在当前队伍最末端。现在想知道所有人都入队伍之后每人的后面是谁。 ★数据输入
输入第一行为一个正整数 N (2 < N < 10000), 表示有 N 个人,编号为 1 到 N。。
接下来 1 行,有 N 个整数,0 或者 1。第 i 个数表示第 i 个同学是排在当前队伍最前端
还是在最末端。(0 表示排在当前队伍最前端,1 表示排在当前队伍最末端)
★数据输出
输出 N 行每行一个整数。第 i 行的整数表示全部人都入队伍后第 i 个同学后面的同学的

编号,如果后面没人的同学则输出 -1。 输入示例 输出示例

input:

6
0
1
0
1
0

1

output:

2
4
1
6
3

-1

利用双端队列可以很轻松解决此题

#include<iostream>
#include<deque>
#include<algorithm>
using namespace std;
int main()
{
	int n,flag,i;
	deque<int> Q;
	deque<int>::iterator iter;
	while(cin>>n)
	{
		for(i=1;i<=n;i++)
		{
			cin>>flag;
			if(flag==0)  //一次将第i个同学插入到队首或者队尾
				Q.push_front(i);
			else Q.push_back(i);
		}
		for(i=1;i<=n;i++)
		{
			iter=find(Q.begin(),Q.end(),i);   //找到第i个同学的位置
			if((++iter)!=Q.end())   //下一个同学的位置
			cout<<*iter<<endl;    
			else cout<<-1;   //如果后面没有人了,则输出-1
		}

	}
	return 0;
}


版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

c++ 数据结构 双端(循环)队列

双端队列:相比循环队列来说,既可以取队头元素,又可以取队尾元素;可以从队头出队,也可以从队头进队;可以从队尾进队,也可以从队尾出队。 所以本文用继承循环队列的方式来实现双端队列: 1.循环队列(Seq...

步步为营(十)常用数据结构(3)STL-Deque(双端队列)

和前两个不同,双端队列(double-end queue)更像是一种折衷的产物。可能是人们发现Vector和List的水火不容,于是发明了这么一个集两家所长的东西。 双端队列具有Vector和Li...

Java 数据结构之Deque(双端队列)

Deque接口是“double ended queue”的缩写(通常读作“deck”),即双端队列,支持在队列的两端插入和删除元素。大多数的实现对元素的数量没有限制,但这个接口既支持有容量限制的deq...

java数据结构之LinkedDeque(用链表实现的双端(即头尾两个哨兵节点)双向(node里两个指向)队列)

package com.jimmy.impl; import com.jimmy.QueueInterf; public class LinkedDeque implements...

数据结构——使用双端链表实现队列(java实现)

队列是这样一种数据结构:在队尾(rear)插入数据项,在队首(front)移除数据项,队列的进出顺序是先进入的先被移除(先进先出,FIFO);      Robert Lafore的书对队列的使用有...

数据结构与算法实验题-战争来了

★实验任务 兽族和不死又要开战了。但是兽族的军队都是分部落管理的,为此,兽王 ——先知萨尔,要先知道自己能调度多少军队,才能在跟不死族开战的时候做好部署。已知现在兽族有 N 个兽人,编号从 1 到 N...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)