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
push A 1
push A 2
pop A
pop A
9
push A 0
push A 1
push B 3
pop A
push A 2
merge A B
pop A
pop A
pop A
9
push A 0
push A 1
push B 3
pop A
push A 2
merge B A
pop B
pop B
pop B
0

Case #1:
2
1
Case #2:
1
2
3
0
Case #3:
1
2
3
0

【题解】

使用三个优先队列,一个给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(联合栈)的更多相关文章

  1. HDU 5818 Joint Stacks ——(栈的操作模拟,优先队列)

    题意:有两个栈A和B,有3种操作:push,pop,merge.前两种都是栈的操作,最后一种表示的是如果“merge A B”,那么把B中的元素全部放到A中,且满足先入后出的栈原则. 分析:显然,我们 ...

  2. HDU 5818 Joint Stacks (优先队列)

    Joint Stacks 题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5818 Description A stack is a data stru ...

  3. HDU 5818 Joint Stacks

    Joint Stacks Time Limit: 8000/4000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Tota ...

  4. hdu 5818 Joint Stacks (优先队列)

    Joint Stacks Time Limit: 8000/4000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Tota ...

  5. HDU 5818 Joint Stacks(左偏树)

    [题目链接] http://acm.hdu.edu.cn/showproblem.php?pid=5818 [题目大意] 给出两个栈A B(初始时为空),有三种操作: push.pop.merge. ...

  6. HDU - 5818 Joint Stacks 比较大の模拟,stack,erase

    https://vjudge.net/problem/HDU-5818 题意:给你两个栈AB,有常规push,pop操作,以及一个merge操作,merge A B 即将A.B的元素按照入栈顺序全部出 ...

  7. HDU 5818:Joint Stacks(stack + deque)

    http://acm.hdu.edu.cn/showproblem.php?pid=5818 Joint Stacks Problem Description   A stack is a data ...

  8. 2016暑假多校联合---Joint Stacks (STL)

    HDU  5818 Problem Description A stack is a data structure in which all insertions and deletions of e ...

  9. 暑假练习赛 004 E Joint Stacks(优先队列模拟)

    Joint StacksCrawling in process... Crawling failed Time Limit:4000MS     Memory Limit:65536KB     64 ...

随机推荐

  1. COM编程之五 动静态链接

    [1]静态链接 静态链接是指由链接器在链接时将库的内容加入到可执行程序中的做法. 链接器是一个独立程序,将一个或多个库或目标文件(先前由编译器或汇编器生成)链接到一块生成可执行程序. 函数和数据被编译 ...

  2. android 学习随笔二十六(动画:属性动画)

    属性动画,属性动画是真正改变对象的某个属性的值 * 补间动画,只是一个动画效果,组件其实还在原来的位置上,xy没有改变1.位移:* 第一个参数target指定要显示动画的组件* 第二个参数proper ...

  3. Delphi XE的firemonkey获取当前文件所在路径的方法

    Delphi XE的firemonkey获取当前文件所在路径的方法 在之前,我们知道有三种方法: ExtractFilePath(ParamStr(0)) ExtractFilePath(Applic ...

  4. Mac下使用Automator实现截屏编辑保存

    以前在Windows下使用百度或者搜狗输入法的截图工具很方便.❶快捷键(Alt+X,我设置的是这个),❷选择区域,❸编辑所选区域,包括添加文字,线条框框,调色,❹点击『✔️』选择保存位置,修改文件名保 ...

  5. C# Community Projects

    Community Supported C# Drivers See the officially supported MongoDB C# driver mongodb-csharp driver ...

  6. 记录整合sprinmvc+log4j的的过程

    简介 由于进一步的学习以及便于自己更好的调试程序中遇到的错误,开始了将log4j整合到web项目中,项目是基于springmvc的,所以就做了一个springmvc和web项目的整合demo,本篇博客 ...

  7. js里的匿名函数 数组排序

    // 匿名函数:其实就是函数的简写形式 var method =function(){ alert("123"); } method(); // 匿名函数可以用于事件的处理 fun ...

  8. jsoup的基本写法

    jsoup这个工具用于抓取并解析网页,用起来也比较简单,语法上与Jquery类似,基本写法如下: File input = new File("/tmp/input.html"); ...

  9. YTU 2973: C语言习题5.25--文件操作2

    2973: C语言习题5.25--文件操作2 时间限制: 1 Sec  内存限制: 128 MB 提交: 242  解决: 105 题目描述 文本文件score.dic 中存储了n名学生的信息(班级编 ...

  10. (翻译)理解Java当中的回调机制

    原文地址:http://cleancodedevelopment-qualityseal.blogspot.com/2012/10/understanding-callbacks-with-java. ...