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 << '' << 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()-)
{
reverse(iMax,Stack.end());
cout << distance(Stack.begin(),iMax) + <<' ';
}
//翻转最上面的位置
reverse(it,Stack.end());
cout << distance(Stack.begin(),it) + << ' ';
}
}
}
return ;
}

UVa OJ 120的更多相关文章

  1. UVa OJ 10071

    Problem B Back to High School Physics Input: standard input Output: standard output A particle has i ...

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

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

  3. UVa OJ 194 - Triangle (三角形)

    Time limit: 30.000 seconds限时30.000秒 Problem问题 A triangle is a basic shape of planar geometry. It con ...

  4. UVa OJ 175 - Keywords (关键字)

    Time limit: 3.000 seconds限时3.000秒 Problem问题 Many researchers are faced with an ever increasing numbe ...

  5. UVa OJ 197 - Cube (立方体)

    Time limit: 30.000 seconds限时30.000秒 Problem问题 There was once a 3 by 3 by 3 cube built of 27 smaller ...

  6. UVa OJ 180 - Eeny Meeny

    Time limit: 3.000 seconds限时3.000秒 Problem问题 In darkest <name of continent/island deleted to preve ...

  7. UVa OJ 140 - Bandwidth (带宽)

    Time limit: 3.000 seconds限时3.000秒 Problem问题 Given a graph (V,E) where V is a set of nodes and E is a ...

  8. 548 - Tree (UVa OJ)

    Tree You are to determine the value of the leaf node in a given binary tree that is the terminal nod ...

  9. UVa OJ 10300

    Problem A Ecological Premium Input: standard input Output: standard output Time Limit: 1 second Memo ...

随机推荐

  1. idea设置utf-8

  2. spark原理

    SparkContext将应用程序代码分发到各Executors,最后将任务(Task)分配给executors执行 Application: Appliction都是指用户编写的Spark应用程序, ...

  3. ApocalypseSomeday

    ApocalypseSomeday CountDownLatch和CyclicBarrier分别都是在什么时候使用的? Charles使用(apphttp抓包,request拦截,response拦截 ...

  4. GitHub学习途径

    之前学习GitHub的一个pdf文件 作者是stormzhang 我觉得那个pdf教的很详细,我还没看完,正在学习中,学到了文件的clon和在本机如何更新GitHub的文件. 在此分享一下 下载链接h ...

  5. django学习,session与cookie

    Cookies,某些网站为了辨别用户身份.进行session跟踪而储存在用户本地终端上的数据(通常经过加密).Cookie最早是网景公司的前雇员Lou Montulli在1993年3月的发明.Cook ...

  6. web安全系列1:入侵的途径

    大家好,接下来的很长一段时间我都会介绍和web安全有关的知识,欢迎大家关注和转发. 话不多说,我们首先来看看今天的主题----入侵的途径.当然,今天介绍的都是针对web网站的常用手法和技巧. 不可否认 ...

  7. Windows和Office激活汇总

    Windows和Office是常用的软件.多数情况下,即使不激活,也会使用一部分功能.今天来看一下很多前辈的工作成果. 1. Windows 7&10 1.1 永久激活 通过key 分享几个常 ...

  8. 使用Eclipse的代码追踪功能

    在使用Java编写复杂一些的程序时,你会不会常常对一层层的继承关系和一次次方法的调用感到迷惘呢?幸亏我们有了Eclipse这么好的IDE可以帮我们理清头绪--这就要使用Eclipse强大的代码追踪功能 ...

  9. [smf]smf论坛也很漂亮

    smf论坛代码国内使用的比较少,可能是大家习惯了dz论坛的互动方式吧!但是,smf论坛系统不失为一款好的论坛系统,也是目前为数不多的开源代码.使用起来之后,你会体会到它强大的后台操作.(例如:插件的安 ...

  10. 为什么delete指针后指针设为null(已解答)

    int *p;/*........*/delete p; p=null; 看代码的过程中,有这么一个疑问.删除了指针p,指针p既是不存在,怎么还能设置指针p为null呢?为什么还要设置为null呢? ...