UVA Stacks of Flapjacks 栈排序
题意:给一个整数序列,输出每次反转的位置,输出0代表排序完成。给一个序列1 2 3 4 5,这5就是栈底,1是顶,底到顶的位置是从1~5,每次反转是指从左数第i个位置,将其及其左边所有的数字都反转,假如反转位置2,则1 2 3 4 5就变成 4 3 2 1 5. 问怎样经过最少次数的反转能得到升序12345。
思路:每次产生一个最大的数字到右边,经过n次就升序了。每次产生可能需要两次反转,也可能1次就搞定,可能0次。0次是因为该数已经在最终位置上;1次搞定是因为最大数已经在栈顶(最左边),一反转就到达了它最终的位置上;2次是因为最大数不在栈顶,需要经过多一次反转,将它搞到栈顶先,再按1次的情况处理。难度主要在输入输出上。
#include <iostream>
#include <cstring>
#include <algorithm>
#include <stdio.h>
using namespace std;
int a[],sorted_b[];
int main()
{
//freopen("input.txt", "r", stdin);
char c;
int tmp;
while()
{
int i=;
while(scanf("%d", &tmp),c=getchar())
{
cout<<(a[i]=sorted_b[i]=tmp);
i++;
if(c=='\n'||c==EOF) break;
else cout<<" ";
}
printf("\n");
sort(sorted_b, sorted_b+i);
for(int j=i-; j>; j--)
{
if(sorted_b[j]==a[j]) continue; //相同则略过
if(a[]!=sorted_b[j]) //如果最大已经在栈顶,省去一次翻转
{
int k;
for(k=; k<j; k++) //寻找sorted_b[j]
{
if(a[k]==sorted_b[j]) break;
}
cout<<i-k<<" "; //此位置要翻
reverse(a,a+k+);
}
cout<<i-j<<" ";
reverse(a,a+j+);
}
cout<<""<<endl;
if(c==EOF) return ;
}
return ;
}
AC代码
UVA Stacks of Flapjacks 栈排序的更多相关文章
- uva Stacks of Flapjacks
Stacks of Flapjacks 题目链接:Click Here~ 题目描写叙述: ...
- Stacks of Flapjacks(栈)
Stacks of Flapjacks Background Stacks and Queues are often considered the bread and butter of data ...
- Uva 120 - Stacks of Flapjacks(构造法)
UVA - 120 Stacks of Flapjacks Time Limit: 3000MS Memory Limit: Unknown 64bit IO Format: %lld &a ...
- uva 120 stacks of flapjacks ——yhx
Stacks of Flapjacks Background Stacks and Queues are often considered the bread and butter of data ...
- NOIP2008双栈排序[二分图染色|栈|DP]
题目描述 Tom最近在研究一个有趣的排序问题.如图所示,通过2个栈S1和S2,Tom希望借助以下4种操作实现将输入序列升序排序. 操作a 如果输入序列不为空,将第一个元素压入栈S1 操作b 如果栈S1 ...
- noip2008 双栈排序
题目描述 Description \(Tom\)最近在研究一个有趣的排序问题.如图所示,通过\(2\)个栈\(S_1\)和\(S_2\),\(Tom\)希望借助以下\(4\)种操作实现将输入序列升序排 ...
- BZOJ 2080: [Poi2010]Railway 双栈排序
2080: [Poi2010]Railway Time Limit: 10 Sec Memory Limit: 259 MBSubmit: 140 Solved: 35[Submit][Statu ...
- 双栈排序(codevs 1170)
题目描述 Description Tom最近在研究一个有趣的排序问题.如图所示,通过2个栈S1和S2,Tom希望借助以下4种操作实现将输入序列升序排序. 操作a 如果输入序列不为空,将第一个元素压入栈 ...
- #include <NOIP2008 Junior> 双栈排序 ——using namespace wxl;
题目描述 Tom最近在研究一个有趣的排序问题.如图所示,通过2个栈S1和S2,Tom希望借助以下4种操作实现将输入序列升序排序. 操作a 如果输入序列不为空,将第一个元素压入栈S1 操作b 如果栈S1 ...
随机推荐
- 微信小程序自学第二课:app及页面的生命周期、使用setData绑定数据
一.App声明周期 1.App() app.js中的App() 函数用来注册一个小程序.接受一个 object 参数,其指定小程序的生命周期函数等. 示例代码: App({ onLaunch: fun ...
- python接口自动化(三十五)-封装与调用--流程类接口关联(详解)
简介 流程相关的接口,主要用 session 关联,如果写成函数(如上篇),s 参数每个函数都要带,每个函数多个参数,这时候封装成类会更方便.在这里我们还是以博客园为例,带着小伙伴们实践一下. 接口封 ...
- ProtoBuf练习(二)
重复数据类型 protobuf语言的重复字段类型相当于C++的std::list数据类型 工程目录结构 $ ls proto/ TServer.proto TSession.proto proto文件 ...
- Redis常见7种使用场景(PHP)
转发:https://www.jianshu.com/p/2f3add45351b Redis是一个开源的使用ANSI C语言编写.支持网络.可基于内存亦可持久化的日志型.Key-Value数据库,并 ...
- 如何给自己的开源项目选择和添加 License
License 的作用:开源 == 为所欲为? 开源并不等于为所欲为! 代码的用途,修改之后的代码有什么要求,开源程序对于原作者的权利和责任等等,都是需要明确的. 开源协议 License 就是这么一 ...
- 机房重构——泛型和“DataTable”
前言 我们都知道在机房重构的时候,大多数都在用七层进行重构,每一层都依赖实体.所以不管怎么调用,返回的应该是实体参数,这样才符合大多数的逻辑,这样我们试想一下,如果我们要求在U层返回多个实体值,怎么办 ...
- vue——做了一个幼稚的小页面
我的小花花没有转起来,不开心  ̄へ ̄
- LeetCode 128 Longest Consecutive Sequence 一个无序整数数组中找到最长连续序列
Given an unsorted array of integers, find the length of the longest consecutive elements sequence.Fo ...
- Linux Bash 命令行快捷键小结
编辑命令 光标移动 剪切.删除 Ctrl ...
- VirtualBox 在Centos 7 中安装增强功能 (共享文件夹)
1.分配光驱 2.安装相关依赖包 yum install -y bzip2 gcc gcc-devel gcc-c++ gcc-c++-devel make kernel-d 3.创建临时文件夹 mk ...