SOJ4478 Easy Problem II(模拟、栈)
Time Limit: 3000 MS Memory Limit: 131072 K
Description
在数据结构中 我们学习过 栈 这种数据结构
通过栈 我们可以将1,2,3,...,n转化成一个新的排列 举个例子
1,2,3可以转变为2,1,3
只要我们这样做
将1加入栈中
将2加入栈中
出栈(此时出栈的为2)
出栈(此时出栈的为1)
将3加入栈中
出栈(此时出栈的为3)
故出栈顺序为2 1 3 现在输入一个排列,我们要判断该排列能否被栈通过1,2,3,...,n 转化出来
Input
有多组数据
第一行为n 代表输入数据的组数
接下来n行 第一个数代表当前排列数字的个数m 接下来的数代表一个1-m的排列
(1 小于 m 小于等于 50)
Output
对于每一组数据
若该排列能通过栈转化1,2,3,...,n而来
那么输出Yes
否则输出No
Sample Input
4
3 2 1 3
2 2 1
5 3 2 4 1 5
3 3 1 2
Sample Output
Yes
Yes
Yes
No 思路:这一个题乍一看上去还是有一点蒙圈,因为很难使用现有的公式什么套用,如果DFS暴力去做,那么复杂度至少是在2^n的级别,面对n<=50的范围显然是不能接受的。所以在询问了大神以后确定这个题是一个模拟,我们只需要模拟栈的工作状态就可以把这个题做出来了。
具体而言,我的方法是记录当前输出过的最大的数,如果后续输入的数是符合栈的运算规律的,由于初始队列是严格单调连续递增的,所以后续一共有两种情况,一是新输入的数比现在已经输入过的数的最大值还要大,二是新输入的数是比当前最大值小的数中的最大的没有被输出过的数。
第一种情况是模拟了一次性压多个数入栈,之后再输出的情况,比如1 2 5 4 3。5比之前已经出现过的最大的数2要大,符合条件。第二种情况是模拟了,在将多个数压入栈以后,开始从栈里面拿出数输出的情况,比如前面的 1 2 5 4 3,当5输出以后,下一个输出的数是4和3的情况,因为初始状态下,数据是严格单调连续递增的,所以不会出现空过一个未输入最大值进行输出的情况。模拟即可。 AC代码:
#include <stdio.h>
#include <string.h>
#include <iostream>
using namespace std; int num[]; int main(){
int T;
scanf("%d",&T);
while(T--){
int n;
cin>>n;
int maxn,temp,flag=;//maxn存储当前最大值,temp是为了临时存储每一次读入的数, flag是判断当前是否还处于合法输出状态
memset(num,,sizeof(num));//初始化
cin>>temp;//第一次单独处理
maxn=temp;
num[temp]++;
for(int i=;i<n;i++){
cin>>temp;
if(temp>maxn){
maxn=temp;
num[temp]++;
}
else{
for(int j=maxn;j>&&flag;j--){
if(num[j]==){
if(temp!=j){
flag=;
printf("No\n");
break;
}else{
num[temp]++;
break;
}
}
}
} }
if(flag==)printf("Yes\n");
}
return ;
}
SOJ4478 Easy Problem II(模拟、栈)的更多相关文章
- HDOJ/HDU 1022 Train Problem I(模拟栈)
Problem Description As the new term comes, the Ignatius Train Station is very busy nowadays. A lot o ...
- HDU 1022 Train Problem I 模拟栈题解
火车进站,模拟一个栈的操作,额外的栈操作,查看能否依照规定顺序出栈. 数据量非常少,故此题目非常easyAC. 直接使用数组模拟就好. #include <stdio.h> const i ...
- Train Problem I(模拟栈)
题意:模拟栈,试问使用2个栈,能否使得串1变为串2 思路:模拟,经典问题,注意只要相同的元素放到栈顶后就不会再移动了,只需要考虑剩下的元素,因此每次只考虑一个元素的进入方式. #include< ...
- hdu1032 Train Problem II (卡特兰数)
题意: 给你一个数n,表示有n辆火车,编号从1到n,入站,问你有多少种出站的可能. (题于文末) 知识点: ps:百度百科的卡特兰数讲的不错,注意看其参考的博客. 卡特兰数(Catalan):前 ...
- HDU1002 -A + B Problem II(大数a+b)
A + B Problem II Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) ...
- hdu 2055 An easy problem (java)
问题: 開始尝试用字符做数组元素.可是并没实用. 在推断语句时把a z排出了. An easy problem Time Limit: 1000/1000 MS (Java/Others) Me ...
- hdu2601 An easy problem(数学)
题目意思: http://acm.hdu.edu.cn/showproblem.php? pid=2601 给出一个数N,求N=i*j+i+j一共同拥有多少种方案. 题目分析: 此题直接暴力模拟就可以 ...
- A + B Problem II(大数加法)
http://acm.hdu.edu.cn/showproblem.php?pid=1002 A + B Problem II Time Limit: 2000/1000 MS (Java/Other ...
- HDU 1023 Train Problem II (大数卡特兰数)
Train Problem II Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) ...
随机推荐
- [转]How can I install the VS2017 version of msbuild on a build server without installing the IDE?
本文转自:http://stackoverflow.com/questions/42696948/how-can-i-install-the-vs2017-version-of-msbuild-on- ...
- Opencv中图像的遍历与像素操作
Opencv中图像的遍历与像素操作 OpenCV中表示图像的数据结构是cv::Mat,Mat对象本质上是一个由数值组成的矩阵.矩阵的每一个元素代表一个像素,对于灰度图像,像素是由8位无符号数来表示(0 ...
- 关于逻辑删除标识字段value的设定
为了容易记忆,项目里所有表记录的逻辑删除可以用“-1”(或其他值)来表示.
- Linux必会必知
一.前言 Linux作为一个开源系统,被极客极力推崇,作为程序员不来了解一下,那就亏了 Linux是一种自由和开放源代码的类UNIX操作系统.该操作系统的内核由林纳斯·托瓦兹在1991年10月5日首次 ...
- Linux常用指令整理
Linux常用命令整理 快捷键 [Tab] [Tab] 接在一串指令的第一个字的后面,则为"命令补全": [Tab] 接在一串指令的第二个字以后时,则为"文件补齐&quo ...
- 七 FileChannel
FileChannel是一个连接到文件的通道,可以通过文件通道读写文件 FileChannel无法设置为非阻塞模式,它总是运行在阻塞模式下. 打开FileChannel 在使用FileChannel之 ...
- 优秀iOS文章集合
Runtime 10种用法(没有比这更全的了成为iOS顶尖高手,你必须来这里(这里有最好的开源项目和文章)iOS逆向Reveal查看任意app 的界面JSPatch (实时修复App Store bu ...
- 005hystrix.stream信息聚合Turbine
1.POM配置 和普通Spring Boot工程相比,仅仅添加了Turbine和Spring Boot Starter Actuator依赖 <dependencies> <!--添 ...
- QQ 聊天机器人小薇 1.0.1 发布!
本次发布主要解决了消息丢失(Api返回码[1202])问题,并改进了改进了一些细节. 简介 XiaoV(小薇)是一个用 Java 写的 QQ 聊天机器人 Web 服务,可以用于社群互动: 监听多个 Q ...
- vs2010开发activex(MFC)控件/ie插件(一)
原文:http://blog.csdn.net/yhhyhhyhhyhh/article/details/50782904 vs2010开发activex(MFC)控件: 第一步:生成ac ...