Background
背景

Stacks and Queues are often considered the bread and butter of data structures and find use in architecture, parsing, operating systems, and discrete event simulation. Stacks are also important in the theory of formal languages.
栈和队列常常被视为数据结构中的面包和黄油,广泛应用在体系结构、分析、操作系统和离散事件等领域。栈同时也在形式语言理论中发挥着重要的作用。

This problem involves both butter and sustenance in the form of pancakes rather than bread in addition to a finicky server who flips pancakes according to a unique, but complete set of rules.
这个问题是让一个挑剔的厨师按照独特而完备的一组规则翻动煎饼,以保持煎饼(而不是面包)中的黄油和营养素不被烧坏。(这句话实在不知道怎么翻译才好,还望各位老师指正!Ps. 这道题翻译的难度要比解题大多了!!)

The Problem
问题

Given a stack of pancakes, you are to write a program that indicates how the stack can be sorted so that the largest pancake is on the bottom and the smallest pancake is on the top. The size of a pancake is given by the pancake's diameter. All pancakes in a stack have different diameters.
给定一叠煎饼,你要写一个程序计算出如何才能使这叠煎饼自底向上由大至小的排列。给定煎饼的半径作为其尺寸,一叠煎饼的大小各不相同。

Sorting a stack is done by a sequence of pancake "flips". A flip consists of inserting a spatula between two pancakes in a stack and flipping (reversing) the pancakes on the spatula (reversing the sub-stack). A flip is specified by giving the position of the pancake on the bottom of the sub-stack to be flipped (relative to the whole stack). The pancake on the bottom of the whole stack has position 1 and the pancake on the top of a stack of n pancakes has position n.
为煎饼叠排序是通过一些列的“翻转”动作来完成的。一个翻转动作就是将一个小铲插到煎饼叠中的某两个煎饼之间,然后将小铲上面的所有煎饼翻转(倒转小铲上面的子栈)。每个翻转动作由其开始的位置给出,即小铲上面子栈中最底下一个煎饼的编号。整叠煎饼中最下面一个的位置为1,n个煎饼的叠中最上面一个的位置为n。

A stack is specified by giving the diameter of each pancake in the stack in the order in which the pancakes appear.
一个煎饼叠由一组表示其中各煎饼直径的数构成,它们排列的顺序就是给出的这些数的顺序。

For example, consider the three stacks of pancakes below (in which pancake 8 is the top-most pancake of the left stack):
比如下面三个煎饼叠(煎饼8是左边一叠的最上面的一个)

8           7           2
         4           6           5
         6           4           8
         7           8           4
         5           5           6
         2           2           7

The stack on the left can be transformed to the stack in the middle via flip(3). The middle stack can be transformed into the right stack via the command flip(1).
左边一叠可以通过翻转第3个煎饼变成中间一叠的顺序。中间一叠可以通过翻转第1个煎饼变成右边一叠的顺序。

The Input
输入

The input consists of a sequence of stacks of pancakes. Each stack will consist of between 1 and 30 pancakes and each pancake will have an integer diameter between 1 and 100. The input is terminated by end-of-file. Each stack is given as a single line of input with the top pancake on a stack appearing first on a line, the bottom pancake appearing last, and all pancakes separated by a space.
输入包括一系列煎饼叠。每叠都由1到30个煎饼组成,并且每个煎饼的直径都在 1到100之间。输入由EOF结束。每叠煎饼独占一行,最上面的在行首,最下面的在行尾,各煎饼中间由空格隔开。

The Output
输出

For each stack of pancakes, the output should echo the original stack on one line, followed by some sequence of flips that results in the stack of pancakes being sorted so that the largest diameter pancake is on the bottom and the smallest on top. For each stack the sequence of flips should be terminated by a 0 (indicating no more flips necessary). Once a stack is sorted, no more flips should be made.
对应于每叠煎饼数据,必须在第一行输出原叠的内容,接下来输出一组翻转动作的序列,使得这一叠煎饼自底向上由大至小的排列。输出的每一组翻转动作序列都要由0来结束(表示不再进行翻转)。一旦一叠煎饼已经排好序,就不能再进行任何翻转。

Sample Input
输入示例

1 2 3 4 5
5 4 3 2 1
5 1 2 3 4

Sample Output
输出示例

1 2 3 4 5
0
5 4 3 2 1
1 0
5 1 2 3 4
1 2 0

#include <algorithm>
#include <iostream>
#include <deque>
#include <string>
#include <sstream>
using namespace std;
int main()
{for(string strLine;getline(cin,strLine);cout << '0' << endl){cout << strLine << endl;istringstream iss(strLine);deque<int> Stack;for(int nDiam; iss >> nDiam;Stack.push_front(nDiam));for(deque<int>::iterator it = Stack.begin(); it != Stack.end();++it){deque<int>::iterator iMax = max_element(it,Stack.end());//如果最大就是it if(iMax !=it){//如果最大的不是最上面,先最大的反转到最上面 if(iMax != Stack.end()-1){reverse(iMax,Stack.end());cout << distance(Stack.begin(),iMax) + 1 <<' ';}//翻转最上面的位置
                reverse(it,Stack.end());cout << distance(Stack.begin(),it) + 1 << ' ';}}}return 0;
}

转载于:https://www.cnblogs.com/Alandre/p/3425091.html

UVa OJ 120相关推荐

  1. UVa OJ 128 - Software CRC (软件CRC)

    Time limit: 3.000 seconds 限时:3.000秒 Problem 问题 You work for a company which uses lots of personal co ...

  2. Uva Oj 514 - Rails

    模拟,数据结构 好吧... 3Y 一直被bjtu oj的范围跪了 1w的WA,10w的AC... 这数据规模还不给 输入输出到是没出什么问题 #include<stdio.h> #incl ...

  3. uva oj 567 - Risk(Floyd算法)

    1 /* 2 一张有20个顶点的图上. 3 依次输入每个点与哪些点直接相连. 4 并且多次询问两点间,最短需要经过几条路才能从一点到达另一点. 5 6 bfs 水过 7 */ 8 #include&l ...

  4. UVa OJ 126 - The Errant Physicist (粗心的物理学家)

    Problem 问题 The well-known physicist Alfred E Neuman is working on problems that involve multiplying ...

  5. UVA OJ 650题, 2013年9月6日

  6. UVa OJ 11121

    1.感觉最近做题正确率有所提高... 2.本题是求一个数的-2进制,如果傻傻地按照二进制来肯定是错的啦~因为负数取余和我们想得不太一样...我的方法是遇到奇数的时候减一,再递归处理"这个数与 ...

  7. UVa OJ 12086

    1.Fenwick树的基础题,没什么花头,就是套模板,居然因为s数组开小了而WA,囧... #include<cstdio> #include<cstring> using n ...

  8. 冒泡排序 oj - Google 搜索

    冒泡排序 oj - Google 搜索 UVA OJ 11495 Bubbles and Buckets (冒泡排序,逆序对) | cainiaozr cainiaozr.wordpress.com/ ...

  9. UVa Online Judge 西班牙Valladolid 在线判官 和 uDebug使用简单教程

    udebug使用在后面 https://uva.onlinejudge.org/ 1.这是主界面,如果你还没有账号,那么就点击图中的register. 2.然后就是填写信息,邮箱要用gmail,信息填 ...

最新文章

  1. 关于亿级账户数据迁移,你应该试试这种方法...
  2. C#正则表达式提取HTML中IMG标签的SRC地址(转)
  3. 学习笔记之与 30 家公司过招,得到了这章面试心法
  4. 网易云信荣获第十五届中国企业年终评选「IT行业优秀技术奖」!
  5. Python对区间内回文素数的判断
  6. mysql 空位补0_MySQL-13(表的创建、数值类型整型、float/decimal、ZEROFILL、BIT(M))
  7. 主流搜索引擎博客提交地址
  8. get_digits
  9. Cannot resolve com.oracle:ojdbc14:11.2.0.1.0
  10. TCL学习心得(2)Tcl语言的语法
  11. JavaSe基础总结
  12. 向Spring大佬低头——大量源码流出解析
  13. Dreamweaver简单网页——HTML+CSS小米官网首页的设计与实现
  14. 关于PBOC3.0发卡行认证的问题
  15. 传智播客JavaWeb听课总结
  16. 解压缩zip文件的工具类
  17. python能调用身份证读卡器吗_华视身份证读卡机Python二次开发
  18. 互联网电视:OTT TV与IPTV的区别
  19. 【组合数学】组合数学简介 ( 组合思想 2 : 数学归纳法 | 数学归纳法推广 | 多重归纳思想 )
  20. excel 文件工作表保护密码破解

热门文章

  1. C语言中为什么要使用enum
  2. tf报错之raise TypeError(“pred must not be a Python bool“)
  3. linux命令行如何换行,一行命令太长,看的不清晰,
  4. HTML <!DOCTYPE> 标签
  5. Leetcode题库 110.平衡二叉树(递归 C实现)
  6. 树莓派连接7寸屏幕(7DP-CAPLCD)的配置笔记
  7. Master公式(计算递归复杂度)
  8. php7的稳定性,探索PHP7(一)--性能
  9. 15.3 动态类型安全
  10. 哪一版可以打开pdg 安卓超星图书馆_南安:山区孩子有了数字图书馆