其他分享
首页 > 其他分享> > Vasya的书【D1-00007】

Vasya的书【D1-00007】

作者:互联网

D1-00007 Vasya的书 时间限制:1000 MS 空间限制:128 MB

题目描述

Vasya有n本书,编号为11~n,放在一个栈中(栈指数据结构中的栈),栈顶的书的编号是a​1​​,其次是a​2​​,以此类推。
Vasya通过n次操作将所有书放到她的书包里,对于第i步,她想把编号为b​i​​的书放入书包,这时:
如果编号为b​i​​的书还在栈中,那么她将依次取出栈顶的书并放入背包,直到放入了编号为b​i​​的书。
如果编号为b​i​​的书不在栈中,说明这本书已经放入书包,则直接进入下一步。
你需要输出Vasya每次操作放入书包书的数量。

输入格式

第一行一个正整数n
第二行n个不同的正整数a​1​​,a​2​​,…,a​n​​
第三行n个不同的正整数b​1​​,b​2​​,…,b​n​​

输出格式

n个整数,第ii个表示Vasya第i次操作放入书包的书的数量

样例解释

样例1解释:
第一次操作取出2本书:编号为1,2
第二次操作取出0本书:
第三次操作取出1本书:编号为3

样例输入

3
1 2 3
2 1 3

样例输出

2 0 1

思路:一道简单的大暴力,先用一个数组判断b[i]是否出现过,再通过q队列每一次记录Vasya每次操作放入书包书的数量。

#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<queue>
using namespace std;
int x[100101];
bool b[100101];
queue<int> q;
int main()
{
	int n,a;
	cin>>n;
	for(int i=1;i<=n;i++){
		cin>>a;
		q.push(a);
		b[a]=true;
	}
	for(int i=1;i<=n;i++){
		cin>>x[i];
		int t=0;
		if(b[x[i]]==true){
			b[x[i]]==false;
			while(q.size()!=0){
				int v=q.front();
				q.pop();
				if(v==x[i]){
					t++;
					break;
				}
				else{
					t++;
					b[v]=false;
				}
			}
			cout<<t<<" ";
		}
		else{
			cout<<0<<" ";
		}
	}
	return 0;
}

标签:Vasya,int,00007,书包,编号,include,放入,D1
来源: https://blog.csdn.net/Liang_Kairui/article/details/122013167