最小字典序(stack)

输入序列中有 n 个正整数,栈 S 开始为空。

你每次只可以进行下面两种操作之一:① 将输入序列头端的数据移至 S 栈顶(进 S 栈);

②  将 S 栈顶元素输出并删除(退 S 栈)。

当然,输入序列非空时才可进行①操作,S 非空时才可进行②操作。

当①和②的操作都无法执行时,一定得到 n 个数据的一个输出序列。

由于①和②混搭的次序不同,导致相应的输出序列也各不相同,

请你求出能够得到的输出序列中字典序最小的一个序列。所谓字典序最小可以这样理解:首元素尽量小,在首元素最小的序列中第二元素尽可能小、在前 2 数据字典序最小的序列中,第三项尽可能小…,直至 n 项全部排完。

【输入输出说明】

输入文件 stack.in 第一行仅有一个正整数 n,表示输入序列中数据的个数。

第二行就是输入序列中依次排列的 n 个数据,相邻两数据间有一个空格。

输出文件 stack.out 中仅有一行 n 个数,就是字典序最小的输出序列,相邻整数间用一个空格隔开。

【输入输出样例】

stack.in:

4

2 3 1 4

stack.out:

1 3 2 4

【样例说明】

得到最小字典序的操作序列为:①①①②②②①②

【数据说明】

60%的数据 n<12;

80%的数据 n<1000;

100%的数据 n<100000,其他数据在 int 范围。


首先我们发现题目是区赛的第二个题,按照往年的惯例,第二个题以贪心模拟为主

而因为要求按照字典序输出,很明显应该满足前面的数尽可能小

于是我们得到了贪心思路:

(1)因为输入序列是单向的,所以可以使用一个idx表示当前处理到第几位

(2)每次查找从前往后最小的数,在这个数的位置压栈

(3)首先弹出第一个数,之后判断每一个栈顶的数是否小于后面最小的数

(4)若栈顶等于后面最小的数,因为输入序列是单向的,所以应该尽可能先弹出前面的数

(5)为了节约时间,初始化book数组,用book[i]表示第i个数至第n个数之间最小的数的最小编号(可以利用递推实现)

上代码:

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>
#include<cstring>
#include<stack>
#define _ 0
#define olinr return
#define love_nmr 0
using namespace std;
int n,a[],book[],idx;
int main()
{
freopen("stack.in","r",stdin);
freopen("stack.out","w",stdout);
int i,j;
stack<int> s;
scanf("%d",&n);
for(i=;i<=n;i++)scanf("%d",&a[i]);
book[n]=n;
for(i=n-;i>=;i--)
{
if(a[i]<=a[book[i+]])book[i]=i;
else book[i]=book[i+];//初始化,若第i-1位置的数小于从第i至第n位置的数则更新book[i-1],否则延续
}
bool flag=false;//判断是否首位
while()
{
if(idx==n+)
{
while(!s.empty())
{
printf("%d ",s.top());
s.pop();
}
return ;
}//处理到输入序列最后一位,全部弹出
if(!flag)idx=,flag=true;
for(i=idx;i<=book[idx];i++)s.push(a[i]);//压栈
idx=i;//更新idx
if(!s.empty())
{
printf("%d ",s.top());
s.pop();//弹出栈顶
}
while(!s.empty()&&s.top()<=a[book[idx]])
{
printf("%d ",s.top());
s.pop();//继续弹出
}
}
olinr ~~love_nmr-(^_^);
}

比赛的时候就得了50分

后来发现把a[book[idx]]打成了book[idx] Q_Q

2018.9.26 2018NOIP冲刺之栈的更多相关文章

  1. 2018.11.2 2018NOIP冲刺之最短公共父串

    很有意思的一个题 试题描述 给定字符串A和字符串B,要求找一个最短的字符串,使得字符串A和B均是它的子序列. 输入 输入包含两行,每行一个字符串,分别表示字符串A和字符串B.(串的长度不超过30) 输 ...

  2. 2018.10.20 2018NOIP冲刺之酒厂选址

    题目传送门 明显能够看出有一个建图求路程的优化 然而发现10000*10000爆空间QAQ 为了做一些初始化方面的优化 我们发现了一个叫做前缀和的东西 可以在环上查到两个之间的最短距离 同时还要做一些 ...

  3. 2018.10.1 2018NOIP冲刺之立体图

    2008NOIP普及组立体图 请自行百度(事实上放不下了) 图不是很清楚 下面有 [输入] 输入文件 drawing.in 第一行有用空格隔开的 2 个整数 m 和 n,表示有 m*n  个格子 (1 ...

  4. 2018.9.8 2018NOIP冲刺之配对

    普及组第四题难度 主体思路竟然是贪心Q_Q 链接:https://www.nowcoder.com/acm/contest/164/D来源:牛客网 题目描述 小A有n个长度都是L的字符串.这些字符串只 ...

  5. OPPO Developers Conference(2018.12.26)

    时间:2018.12.26地点:北京国家会议中心

  6. 2018.10.26 浪在ACM 集训队第四次测试赛

    2018.10.26 浪在ACM 集训队第四次测试赛 题目一览表 来源 考察知识点 完成时间 A 生活大爆炸版 石头剪刀布  NOIP 提高组 2014   模拟???  2018.11.9 B 联合 ...

  7. 微信小程序 - 接口更新记录以及解决方案(2018/12/26)

    2018/8/17 - 背景音频需要在app.json添加requireBackGroundModes 2018/9/12 - 微信更改获取用户信息接口/获取位置等接口 - button 2018/1 ...

  8. 2018/4/26 python文件处理方式

    目录 2018/4/26总结 1. 如果有一天群内问题总结: 问题:python2和python3的默认编码是什么? 2. python学习总结: python的处理文件方式 2018/4/26总结 ...

  9. 2018.10.26 浪在ACM 集训队第二次测试赛

    2018.10.26 浪在ACM 集训队第二次测试赛 整理人:苗学林 A海港 参考博客:[1]:李继朋https://www.cnblogs.com/violet-acmer/p/9859006.ht ...

随机推荐

  1. WebService它Soap头验证进入

    1.创建一个新的类.如"AuthHeaderUser",在传承"System.Web.Services.Protocols.SoapHeader"类别 2.新W ...

  2. WPF 绑定到集合

    <Window x:Class="CollectionBinding.MainWindow"        xmlns="http://schemas.micros ...

  3. Plupload上传插件中文文档

    Plupload上传插件中文帮助文档 如有疑问,加群交流:646104701 下载地址:https://www.plupload.com/download/ 配置参数 实例化一个plupload对象时 ...

  4. Python标准库(3.x): itertools库扫盲

    itertools functions accumulate() compress() groupby() starmap() chain() count() islice() takewhile() ...

  5. Advanced Installer,搜索注册表,根据注册表选择安装路径

    原文:Advanced Installer,搜索注册表,根据注册表选择安装路径 又停了一段时间没有更新了,今天上博客,发现有位朋友就打包的时候需要搜索注册表(不同版本注册表路径不一致,需要搜索多次来确 ...

  6. PHPstudy + phpstrom +xdebug 断点调试(windows) - CSDN博客

    原文:PHPstudy + phpstrom +xdebug 断点调试(windows) - CSDN博客 php.ini 配置 需要添加如下内容 [XDebug]xdebug.profiler_ou ...

  7. uwp之拍照(使用后置摄像头)

    参考:wp8.1之拍照(获取焦点,使用后置摄像头) uwp开启摄像头要借助CaptureElement呈现来自捕获设备(如照相机或网络摄像机)的流.今天讲讲如何打开摄像头,获取焦点,以及拍照.废话不多 ...

  8. 【备忘】C#语言基础-1

    C#基础 注意区别哟! C#是一种托管语言,与C++不同,不能直接操作系统底层,依赖于 framework. 如果局部变量和全局变量同名,全局变量就会被屏蔽. 函数的返回值类型不是签名的一部分,所以不 ...

  9. 使用dumpbin命令查看dll导出函数及重定向输出到文件(VS自带)

    以前查看dll导出函数,一般使用Viewdll等第三方工具.但由于Viewdll采用dephi编写,因此仅能查看32位的dll.其实微软已经帮我们提供一个查看dll导出函数的命令,嵌在VS开发环境中, ...

  10. 一顶博士帽能带来什么——访GOOGLE公司中国区总裁李开复

      在读了博士生远潇给本报的来信后,GOOGLE公司中国区总裁李开复说,有这些困惑和担心,实际上是很多博士生们在读博士之前并没有认真地想过,自己是不是能耐得住寂寞做学问,是不是能抵御来自物质世界的诱惑 ...