HDU 5818 Joint Stacks(联合栈)
HDU 5818 Joint Stacks(联合栈)
Time Limit: 8000/4000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)
|
Description |
题目描述 |
|
A stack is a data structure in which all insertions and deletions of entries are made at one end, called the "top" of the stack. The last entry which is inserted is the first one that will be removed. In another word, the operations perform in a Last-In-First-Out (LIFO) manner. A mergeable stack is a stack with "merge" operation. There are three kinds of operation as follows: - push A x: insert x into stack A - pop A: remove the top element of stack A - merge A B: merge stack A and B After an operation "merge A B", stack A will obtain all elements that A and B contained before, and B will become empty. The elements in the new stack are rearranged according to the time when they were pushed, just like repeating their "push" operations in one stack. See the sample input/output for further explanation. Given two mergeable stacks A and B, implement operations mentioned above. |
栈是一种数据结构,仅允许在其中一端进行插入和删除,这一端被称为栈顶。最后入栈的元素将会最先出栈。换句话说,这个操作就是后进先出(LIFO)。 一个可合并的栈拥有"merge"操作。有如下三种操作: - push A x: 将 x 插入栈 A - pop A: 弹出 A 的栈顶元素 - merge A B: 合并栈 A 与 B 执行"merge A B"操作后,栈A将获得B中全部元素,随后B则为空。新栈中的元素根据先前的入栈时间重新排列,如同再执行他们的"push"操作到一个栈。参考输入/输出样例的详细说明。 给定两个可合并栈A与B,执行上述操作。 |
|
Input |
输入 |
|
There are multiple test cases. For each case, the first line contains an integer N(0<N≤105), indicating the number of operations. The next N lines, each contain an instruction "push", "pop" or "merge". The elements of stacks are 32-bit integers. Both A and B are empty initially, and it is guaranteed that "pop" operation would not be performed to an empty stack. N = 0 indicates the end of input. |
多组测试用例。对于每个测试用例,第一行有一个整数N(0<N≤105),表示操作的数量。随后N行,每行包含一个"push"、 "pop"或"merge"指令。栈中的元素都是32位整数。保证"pop"操作不会出现在空栈中。N = 0时输入结束。 |
|
Output |
输出 |
|
For each case, print a line "Case #t:", where t is the case number (starting from 1). For each "pop" operation, output the element that is popped, in a single line. |
对于每个用例,输出一行"Case #t:",t表示用例编号(从1开始)。对于每个"pop"操作,输出出栈的元素在单独一行。 |
|
Sample Input - 输入样例 |
Sample Output - 输出样例 |
|
4 |
Case #1: |
【题解】
使用三个优先队列,一个给A,一个B,一个给合并的部分。
当A/B为空的时候,就从合并的部分取。
只用AB的话,感觉就不靠谱,懒癌发作,不想试。
【代码 C++】
#include <cstdio>
#include <queue>
#define mx 100005
int data[mx], id;
int main(){
int t = , n, x;
char op[], o;
while (scanf("%d", &n), n){
printf("Case #%d:\n", t++); id = -;
std::priority_queue<int, std::vector<int> > a, b, m; while (n--){
scanf("%s", op); getchar();
if (op[] == 'u'){
scanf("%c%d", &o, &data[++id]);
if (o == 'A') a.push(id);
else b.push(id);
}
else if (op[] == 'o'){
if (getchar() == 'A'){
if (a.empty()) x = data[m.top()], m.pop();
else x = data[a.top()], a.pop();
}
else{
if (b.empty()) x = data[m.top()], m.pop();
else x = data[b.top()], b.pop();
}
printf("%d\n", x);
}
else{
for (gets(op); !a.empty(); a.pop()) m.push(a.top());
while (!b.empty()) m.push(b.top()), b.pop();
}
}
}
return ;
}
HDU 5818 Joint Stacks(联合栈)的更多相关文章
- HDU 5818 Joint Stacks ——(栈的操作模拟,优先队列)
题意:有两个栈A和B,有3种操作:push,pop,merge.前两种都是栈的操作,最后一种表示的是如果“merge A B”,那么把B中的元素全部放到A中,且满足先入后出的栈原则. 分析:显然,我们 ...
- HDU 5818 Joint Stacks (优先队列)
Joint Stacks 题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5818 Description A stack is a data stru ...
- HDU 5818 Joint Stacks
Joint Stacks Time Limit: 8000/4000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Tota ...
- hdu 5818 Joint Stacks (优先队列)
Joint Stacks Time Limit: 8000/4000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Tota ...
- HDU 5818 Joint Stacks(左偏树)
[题目链接] http://acm.hdu.edu.cn/showproblem.php?pid=5818 [题目大意] 给出两个栈A B(初始时为空),有三种操作: push.pop.merge. ...
- HDU - 5818 Joint Stacks 比较大の模拟,stack,erase
https://vjudge.net/problem/HDU-5818 题意:给你两个栈AB,有常规push,pop操作,以及一个merge操作,merge A B 即将A.B的元素按照入栈顺序全部出 ...
- HDU 5818:Joint Stacks(stack + deque)
http://acm.hdu.edu.cn/showproblem.php?pid=5818 Joint Stacks Problem Description A stack is a data ...
- 2016暑假多校联合---Joint Stacks (STL)
HDU 5818 Problem Description A stack is a data structure in which all insertions and deletions of e ...
- 暑假练习赛 004 E Joint Stacks(优先队列模拟)
Joint StacksCrawling in process... Crawling failed Time Limit:4000MS Memory Limit:65536KB 64 ...
随机推荐
- echo date
echo -n 不换行 echo -n '123';echo '456' #结果:123456 echo -e 启用下列反斜杠转义的解释 \b 退格 \t制表 \n 换行 \r 回车 echo -e ...
- ch2-1:创建模块,并调用模块中的函数
模块就是一个包含python代码的文本文件,文件名以.py结尾,这是python扩展名: 1.创建一个模块nester.py,文件内容为: '''这是一个模块,可以打印列表,其中可能包含嵌套列表''' ...
- makefile 中 $@ $^ %< 使用【转】
转自:http://blog.csdn.net/kesaihao862/article/details/7332528 这篇文章介绍在LINUX下进行C语言编程所需要的基础知识.在这篇文章当中,我们将 ...
- python读入文件
举例说明吧,路径一定要带转义符‘\’,下面的例子中,每一行是一个样本的feature >>> myfile=open("D:\\301\\graduate_thesis\\ ...
- nohup DEMO
nohup,顾名思义:挂起免疫. nohup命令可以防止当你退出系统时,在后台运行的进程被终止.它能让你运行的命令或脚本在你退出系统后继续在后台运行. nohup命令不能自动的将任务放在后台运行,所以 ...
- symfony中twig的流程控制if,for用法
流程控制 if 语句 if语句在twig中的作用如同if语句在PHP中的一样.1.你可以通过下面这个简单的例子来判断表达式的结果是否正确. {% if online == false %} <p ...
- 20145227 《Java程序设计》实验四实验报告
20145227 <Java程序设计>实验四实验报告 实验内容 安装Andriod Studio并配置软件 使用Andriod Studio软件实现Hello World的小程序 实验步骤 ...
- [团队项目3.0]Scrum团队成立
Scrum团队成立 5.Scrum团队成立 5.1 团队名称,团队目标.团队口号.团队照: 5.2 角色分配 产品负责人: 决定开发内容和优先级排序,最大化产品以及开发团队工作的价值. Scrum M ...
- poj3263 Tallest Cow
题意略去. 考虑给定的R对pair(A, B). 即A能看见B,这意味着B不比A低,并且区间内部的所有元素的高度严格小于A的高度. 我们规定区间的方向:若A > B,为反方向,反之称为正方向. ...
- The trouble of Xiaoqian
The trouble of Xiaoqian Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Oth ...