USACO 2011年1月精英赛铜组试题 洗盘子
Bessie 和 Canmuu 将联手洗掉N (1<= N <= 10,000) 个脏盘子。 Bessie 洗; Canmuu 来擦干它们.
每个盘子有一个指定的编号,范围1..N. 开始,所有盘子按顺序排列在栈中, 1号盘子在顶端,N号盘子在底端.
Bessie 会先洗一些盘子,然后放在洗过的盘子栈里(这样原来的顺序颠倒).
然后,或者她洗别的盘子,或者Canmuu 擦干她已经洗好的部分或全部盘子,放在擦干的盘子栈里。
这样直到所有盘子洗完擦干后放置的顺序是什么? 比如 1 <-- top 2 3 4
5 <-- bottom
第一次洗3个:
未洗
| 洗了但未擦干 | | 洗了并擦干的 | | |
TOP 1 2 2
3 -> 3 -> 3 -> 3 4 4 4 2 4 2 BOTTOM 5 - - 5 1 - 5 1 - 5 1 -
开始 洗了1号 洗了2号 洗了3号
Canmuu 擦了2个,然后放在擦干的盘子栈里:
TOP 3 4 2 -> 4 2 -> 4 2 BOTTOM 5 1 - 5 1 3 5 1 3
Bessie 又来洗最后2个:
TOP 5 4 2 -> 4 2 -> 4 2 BOTTOM 5 1 3 5 1 3 - 1 3
Finally, Canmuu 擦干了剩下的三个盘子,放置顺序如下:
TOP 1 4 4 5 -> 5 -> 5 -> 5 4 2 4 2 2 2 BOTTOM - 1 3 - 1 3 - 1 3 - - 3
序号如下: 1, 4, 5, 2, 3.
程序文件名: dishes
输入格式::
第一行: 一个整数N,表示盘子的数量
第2行至N+1行: 每一行两个整数 ,第一整数为1表示洗盘子,为2表示擦盘子,第二个整数表示数量
输入样例 (dishes.in): 5 1 3 2 2 1 2 2 3
输出格式:
共N行:擦干后盘子从顶端到底端的顺序 输出样例 (dishes.out): 1 4 5 2 3