UVA - 120Stacks of Flapjacks (摊煎饼。。)排序
/*
这题使我记起了以前很多忘掉的东西,例如sstream(分割流),deque(双端队列),还有众多函数(STL里的)。值得收藏
值得注意的是这题的序号问题,(因为要求输出翻转的位置),序号从右往左为1-n;
*/
题目大意:
一摞煎饼,煎饼有直径这一属性,从下往上摞,遗憾的是英文看不懂,他给的样例从左往右,表示从上到下。保证按题中所给算法(反转某一位置之上的所有煎饼)使得最后的序列为从小到大排列;
解题思路:
题中所给算法如下例:
2 3 4 1 5 -->1 2 3 4 5
5应该在最后一位,所以2 3 4 1 5不翻转;
检查2位置,不为次小值,寻找此位置之前最大的数 --4 找到后观察其位置是否为顶部,不是顶部将其反转到顶部 4 3 2 1 5
然后将此位置为顶部交换得到1 2 3 4 5;
(若是顶部则直接将顶部与当前位置交换)具体做法则使用双端队列(ps:看到题目为stack一度想用栈),逆序存储,那么队列顶部就是这摞的底部,遍历即可;
代码:
#include<iostream>
#include <vector>
#include <algorithm>
#include <queue>
#include <stack>
#include<set>
#include <cstdio>
#include<iterator>
#include <sstream>
#include <cmath>
#include <deque>
using namespace std; int main()
{
string line;
for (;getline(cin,line);cout<<""<<endl) //这个操作使我眼前一亮,简单但是很有用因为他最后要输出一个0(虽然并不用这么做)
{
int x;
int max_=;
int length=;
int zzzzz=;
stringstream ss(line); //被我遗忘的流分割操作,输入一行进行切割;
deque<int >p; //定义双端队列
while (ss>>x)
{
length++;
if (max_<x) max_=x;
if (zzzzz==)
{
cout<<x;
zzzzz=;
}
else cout<<" "<<x;
p.push_front(x); //把数逆向输入队列。
}
cout<<endl;
deque<int >::iterator it;
for (it=p.begin(); it!=p.end(); it++)
{
//cout<<"asdas"<<endl;
deque<int >::iterator max_pos;
max_pos=max_element(it,p.end());
if (it!=max_pos)
{
if(max_pos!=p.end()-)
{
reverse(max_pos,p.end());
cout<<distance(p.begin(),max_pos)+<<" ";
}
reverse(it,p.end());
cout<<distance(p.begin(),it)+<<" ";
}
}
}
}
PS:
UVA - 120Stacks of Flapjacks (摊煎饼。。)排序的更多相关文章
- Hark的数据结构与算法练习之煎饼排序
算法说明 假设煎锅里边有N个煎饼摞在了一起,它们大小不一并且顺序不一致,我们需要通过拿铲子将它们不停的翻个,进行排序,最终得到一个底下是大的煎饼,上边是小的煎饼的序列.这个排序的过程就是煎饼排序. 这 ...
- Leetcode 969. 煎饼排序
969. 煎饼排序 显示英文描述 我的提交返回竞赛 用户通过次数134 用户尝试次数158 通过次数135 提交次数256 题目难度Medium 给定数组 A,我们可以对其进行煎饼翻转:我们选择 ...
- UVA.10474 Where is the Marble ( 排序 二分查找 )
UVA.10474 Where is the Marble ( 排序 二分查找 ) 题意分析 大水题一道.排序好找到第一个目标数字的位置,返回其下标即可.暴力可过,强行写了一发BS,发现错误百出.应了 ...
- LeetCode969. 煎饼排序
问题:969. 煎饼排序 给定数组 A,我们可以对其进行煎饼翻转:我们选择一些正整数 k <= A.length,然后反转 A 的前 k 个元素的顺序.我们要执行零次或多次煎饼翻转(按顺序一次接 ...
- UVA Stacks of Flapjacks 栈排序
题意:给一个整数序列,输出每次反转的位置,输出0代表排序完成.给一个序列1 2 3 4 5,这5就是栈底,1是顶,底到顶的位置是从1~5,每次反转是指从左数第i个位置,将其及其左边所有的数字都反转,假 ...
- UVA - 120 Stacks of Flapjacks(煎饼)
题意:一叠煎饼,每个煎饼都有一个数字,每次可以选择一个数k,把从锅底开始数第k张以及其上面的煎饼全部翻过来,最终使煎饼有序排列(锅顶最小,锅底最大). 分析:依次从锅底向上,优先排数字最大的煎饼.每次 ...
- Uva120 Stacks of Flapjacks 翻煎饼
水水题.给出煎饼数列, 一次只能让第一个到第i个数列全部反转,要求把数列排序为升序. 算法点破后不值几钱... 只要想办法把最大的煎饼放到最后一个,然后就变成前面那些煎饼的数列的子题目了.递归或循环即 ...
- uva Stacks of Flapjacks
Stacks of Flapjacks 题目链接:Click Here~ 题目描写叙述: ...
- UVA 11039-Building designing【贪心+绝对值排序】
UVA11039-Building designing Time limit: 3.000 seconds An architect wants to design a very high build ...
随机推荐
- [洛谷P4492] [HAOI2018]苹果树
洛谷题目链接:[HAOI2018]苹果树 题目背景 HAOI2018 Round2 第一题 题目描述 小 C 在自己家的花园里种了一棵苹果树, 树上每个结点都有恰好两个分支. 经过细心的观察, 小 C ...
- eclipse 无法解析导入 javax.servlet 的解决方法
出现上述问题的原因是你的Eclipse项目没有导入JSP运行所需要的Tomcat类库,主要是servlet-api.jar文件(或者servlet.jar),tomcat容器里面有这文件,在以下位置: ...
- Presto通过RESTful接口新增Connector
在实际使用Presto的过程中,经常会有以下的一些需求. 添加一个新的Catalog 对不再使用的Catalog希望把它删除 修改某个Catalog的参数 但在Presto中如果进行上述的修改,需要重 ...
- 20155321 2016-2017-2 《Java程序设计》第七周学习总结
20155321 2016-2017-2 <Java程序设计>第七周学习总结 教材学习内容总结 Date/DateFormat Date是日期类,可以精确到毫秒. 构造方法 Date() ...
- win7下设置挂载Linux服务器nfs共享的数据 -- 转
最近学习NFS文件系统的使用,Ubuntu上配置好了,想和Win7共享数据,所以网上搜到了这篇文章.借花献佛,跟大家共享一下: http://www.2cto.com/os/201207/139132 ...
- 【Linux 命令】 rsync 目录覆盖软链接,保持软链接不变并同步目录内容
需求:有两个相同文件名的目录需要使用其中一个目录覆盖另外一个 问题: 被覆盖目录下存在软链接,但在源目录下软链接是一个目录 需要解决的方案: 要求将原目录里和被覆盖目录里冲突的目录文件复制到B的软链 ...
- Python练习-内置函数的应用
说真的,我感觉这几天egon没有睡好,或者是egon心里有事儿,练习给留的太过简单了 # 编辑者:闫龙 # 用map来处理字符串列表,把列表中所有人都变成sb,比方alex_sb #name=['al ...
- 【译】第七篇 Integration Services:中级工作流管理
本篇文章是Integration Services系列的第七篇,详细内容请参考原文. 简介在上一篇文章,我们创建了一个新的SSIS包,学习了SSIS中的脚本任务和优先约束,并检查包的MaxConcur ...
- 自动检测SOCKET链接断开
如何判断SOCKET已经断开 最近在做一个服务器端程序,C/S结构.功能方面比较简单就是client端与server端建立连接,然后发送消息给server.我在server端会使用专门的线程处理一条s ...
- windows 批处理文件调用exe
@echo offstart "" "C:\Users\Administrator\Desktop\testtaotao\Debug\testtaotao.exe&quo ...