[poj1363]Rails_模拟_栈
Rails poj-1363
题目大意:判断一个序列是否是1~n的合法出栈序列。
注释:$1\le n\le 10^4$。
想法:开始想到一种想法。
对于一段序列来讲,显然从首元素开始的连续小于尾元素的序列必定为合法出栈序列,所剩下的数所组成的序列也必为合法出栈序列。
黄色序列中所有数小于尾元素,不小于全序列最小值(废话),而且必定为全队最小值到尾元素-1的一个排列。绿色序列同理。
然后,我们递归处理,先判断前面的黄色序列是否是合法的全排列,绿色序列是否是合法的全排列,然后递归处理。
但是,EdwardFrog有一种更显然的方法。我们进行模拟:
根据题目中的要求,如果当前第i个数小于等待进栈的数,显然它仍在栈里,如果栈首不是它,整个序列就是不合法的。反之,弹出。
如果第i个数大于等待进栈的数,我们连续的进栈,使得它刚好是栈首,此时弹出。
时间复杂度O(n)
最后,附上丑陋的代码... ...
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <queue>
#include <cmath>
using namespace std;
int sta[1010];
int a[1010];
int head,k;
void original()
{
memset(sta,0,sizeof sta);
memset(a,0,sizeof a);
head=0;
k=1;
}
int main()
{
int n;
while(~scanf("%d",&n))
{
if(!n) return 0;
// int n;
// cin >> n;
while(1)
{
original();
bool nxt=false;
for(int i=1;i<=n;i++)
{
scanf("%d",&a[i]);
if(a[i]==0)
{
nxt=true;
break;
}
}
if(nxt) break;
bool flag=true;
for(int i=1;i<=n;i++)
{
if(a[i]<k)
{
if(sta[head]!=a[i])
{
printf("No\n");
flag=false;
break;
}
else
{
head--;
continue;
}
}
else if(a[i]==k) k++;
else
{
while(k<=a[i])
{
sta[++head]=k;
k++;
}
head--;
}
}
if(flag)printf("Yes\n");
}
puts("");
}
return 0;
}
小结:想到一个不可描述,但是觉得贼牛逼的做法时,不妨往简单想一想,毕竟所有的题目都是有简单的点构成的。
[poj1363]Rails_模拟_栈的更多相关文章
- Python模拟入栈出栈操作
目标: 1.编写菜单,提示用户操作选项(push,pop,view,quit) 2.规则:定义列表,先入栈,后出栈,后入栈,先出栈 1.模拟入栈.出栈操作 >>> list1 = [ ...
- 简单用数组模拟顺序栈(c++版)适合新手
**栈是一种操作受限制的线性表,太多官方的话我也不说了,我们都知道栈元素是先进后出的,它有两种存储结构,分别是顺序存储结构和链式存储结构. **今天我先记一下顺序存储结构,后面我会加上链式存储结构的. ...
- 简单用数组模拟顺序栈(c++)
**栈是一种操作受限制的线性表,太多官方的话我也不说了,我们都知道栈元素是先进后出的,它有两种存储结构,分别是顺序存储结构和链式存储结构. **今天我先记一下顺序存储结构,后面我会加上链式存储结构的. ...
- POJ1363 Rails 验证出栈序列问题
题目地址: http://poj.org/problem?id=1363 此题只需验证是否为合法的出栈序列. 有两个思路: 1.每个已出栈之后的数且小于此数的数都必须按降序排列.复杂度O(n^2),适 ...
- Codeforces 982 B. Bus of Characters(模拟一个栈)
解题思路: 排序之后模拟一个栈(也可以用真的栈),时间复杂度o(n). 代码: #include <bits/stdc++.h> using namespace std; typedef ...
- php模拟顺序栈基本操作
php模拟顺序栈基本操作 一.总结 写函数什么永远记住边界情况:比如 echo "栈已满!<br/>" ; 栈已空这种,那就能多考虑几种情况,代码就很正宗了 1.对象 ...
- java学习笔记(基础篇)—数组模拟实现栈
栈的概念 先进后出策略(LIFO) 是一种基本数据结构 栈的分类有两种:1.静态栈(数组实现) 2.动态栈(链表实现) 栈的模型图如下: 需求分析 在编写代码之前,我习惯先对要实现的程序进行需求分析, ...
- 两队列模拟一个栈,python实现
python实现两个队列模拟一个栈: class Queue(object): def __init__(self): self.stack1=[] self.stack2=[] def enqueu ...
- 【Weiss】【第03章】练习3.21:单数组模拟双栈
[练习3.21] 编写仅用一个数组而实现两个栈的例程.除非数组的每一个单元都被使用,否则栈例程不能有溢出声明. Answer: 很简单,一个栈从数组头起,一个栈从数组尾起,分别保留左右栈头索引. 如l ...
随机推荐
- target属性打开方式
在HTML中target目标的四个参数的用法:1.target="_self"表示:将链接的画面内容,显示在目前的视窗中.(内定值) . 即:同(自己)窗口打开,别的数据还存在,相 ...
- [Apple开发者帐户帮助]九、参考(5)支持的功能(tvOS)
tvOS应用程序可用的功能取决于您的程序成员身份. 能力 ADP 企业 Apple开发者 应用程序组 相关域名 背景模式 数据保护 游戏中心 游戏控制器 HomeKit iCloud:Cl ...
- asp.net MVC ajax 请求参数前台加密后台解密
最近有一个需求要求页面查询数据库,查询内容保存到excel里面作为附件加密打包下载.查询的sql作为参数传入后台,实现加密提交.这里做个记录,后面用到直接来拿. 控制器 public ActionRe ...
- Kafka详解与总结(三)
Kafka分片存储机制 几个kafka重要概念: Broker:消息中间件处理结点,一个Kafka节点就是一个broker,多个broker可以组成一个Kafka集群. Topic:一类消息,例如pa ...
- cobbler+kickstart安装笔记
cobbler+kickstart安装笔记 本文参考老男孩配置:https://blog.oldboyedu.com/autoinstall-cobbler/ centos7:开机如果不启动网卡,需要 ...
- webview加载本地页面
main.xml中布局webview,activity中设置如下 MyWebView=(WebView)findViewById(R.id.webView1); MyWebView.requestFo ...
- [转]linux tee 命令详解
转自: http://codingstandards.iteye.com/blog/833695 用途说明 在执行Linux命令时,我们可以把输出重定向到文件中,比如 ls >a.txt,这时我 ...
- PHP 在线 编辑 解析
http://www.w3schools.com/php/default.asp http://www.w3schools.com/php/showphp.asp?filename=demo_s ...
- html5——3D案例(立体汉字,旋转导航)
1.立体汉字:旋转点left,attr(data-cont)可获取自定义属性值,skewY(倾斜转换)参考地址 2.旋转导航:先移动后旋转,li标签需要延迟执行旋转 注意::hover事件触发自己的: ...
- post发送数据 mypost input 改变事件
//name=或者 "&name=" + "123" + "&data=" + "slice" (可以获 ...