CodeForces 1073B 《Vasya and Books》
很明显是栈了好吧
题目大意
给定 本书,序号分别为到,现在执行个操作, 第个操作需要从栈内取出编号为的书,如果该书已经取出,则输出否则将该书从栈内取出,同时取出在栈内比靠上的书,并且输出一共取出了几本书
输入输出格式
输入格式
The first line contains one integer — the number of books in the stack.
The second line contains integers denoting the stack of books.
The third line contains n n integers denoting the steps Vasya is going to perform.
All numbers are distinct, the same goes for .
输出格式
Print integers. The -th of them should be equal to the number of books Vasya moves to his backpack during the -th step.
输入输出样例
#1
1 |
|
1 |
|
#2
1 |
|
1 |
|
#3
1 |
|
1 |
|
解析
本文同步发布于洛谷博客
粗略看了一下 貌似没人和我的解法相同
那就来写一发题解吧
在读入的时候 我们用另一个数组lead[i]
来存编号为i
的书在**读入的数组book[]
**的下标
这样我们在检测读入的书是否被取出时就不用遍历一遍book[]
弹出书本的时候,我们首先看一下这个书本是否被取出
如果是就直接输出0
否则就开始弹出书本
我们用一个变量now = 0
记录当前弹出了几个书本,用一个数组vis[i]
记录第i
本书是否被弹出
在弹出之前,用一个变量orin
记录一下还没更新的now
接着在每次弹出的时候更新vis[++now]
为真,直到遇到当前要弹出的书本编号
最后orin - now
即为答案
代码实现:
1 |
|
总感觉自己的代码能被 Hack
- 本文作者:Handwer STD
- 本文链接:https://blog.handwer-std.top/2018-12-08/CF1073B/index.html
- 版权声明:本博客所有文章均采用 BY-NC-SA 许可协议,转载请注明出处!