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 ...
随机推荐
- The Difference Between Big Data and a Lot of Data
The Difference Between Big Data and a Lot of Data The term “big data” has been around for a while no ...
- 【翻译】Voidbox: Docker on YARN
原文链接:Voidbox – Docker on YARN 读了此文,收获良多,翻译之,方便以后查看~ 文章介绍了Hulu北京大数据团队开发的Docker On YARN实现:Voidbox,一种基于 ...
- python json 访问与字符串截取
# req = requests.Request(url=url, headers=headers, data=data) # html = requests.get(req) # print(htm ...
- jQuery中下拉框select的操作方法详解
最近在写页面的时候常常遇到要动态增删改下拉框select的情况,由于我比较习惯用jquery框架来架构我的前端js,所以就顺便把各种jquery操作下拉框select的方法总结了一下,收藏起来以便下次 ...
- Bzoj3352 [ioi2009]旅行商
Time Limit: 20 Sec Memory Limit: 128 MBSubmit: 89 Solved: 36 Description 旅行商认定如何优化旅行路线是一个非常棘手的计算问题 ...
- 20155232 2016-2017-3 《Java程序设计》第7周学习总结
20155232 2016-2017-3 <Java程序设计>第7周学习总结 教材学习内容总结 第十三章 1.Greenwich MeanTime,格林威治时间,简称GMT时间,由观察太阳 ...
- URL访问 和命名规范
手册:http://v9.help.phpcms.cn/html/2010/structure_0928/71.html http://yourdomain.com/index.php?m=conte ...
- Entity Framework Context上下文管理(CallContext 数据槽)
Context上下文管理 Q1:脏数据 Q2:一次逻辑操作中,会多次访问数据库,增加了数据库服务器的压力 >在一次逻辑操作中实现上下文实例唯一 方法一:单例模式:内存的爆炸式增长 在整个运行期间 ...
- hdu 1251 统计难题(字典树)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1251 统计难题 Time Limit: 4000/2000 MS (Java/Others) M ...
- 原生的js实现jsonp的跨域封装
一.原理 jsonp是利用浏览器请求script文件时不受同源策略的限制而实现的,伪造一个script标签,将请求数据的url赋值给script的src属性,并将该标签添加到html中,浏览器会自动发 ...