关闭

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

标签: 双端队列STLalgorithmC++
793人阅读 评论(0) 收藏 举报
分类:
★实验任务
开学了,有 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;
}


0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:71340次
    • 积分:1398
    • 等级:
    • 排名:千里之外
    • 原创:64篇
    • 转载:1篇
    • 译文:2篇
    • 评论:24条
    最新评论