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) ...
随机推荐
- step3: 创建jobbole爬虫
scrapy startproject Redbacktestcd Redbacktest 创建jobbole爬虫 scrapy genspider jobbole2 blog.jobbole.com ...
- python-爬虫之re模块
re模块中常用功能函数 1.compile() 编译正则表达式模式,返回一个对象的模式.(可以把那些常用的正则表达式编译成正则表达式对象,这样可以提高一点效率.) 格式: re.compile(pat ...
- 实现 如 goole closure 类似功能模块加载函数
看过goole closure 的同学都知道 其中定义一个类名函数时候只要 inlude("") 想加载某个模块只要require("")就可以利用: ...
- IE10 CSS Hack(顺便聊聊IE11的CSS Hack)
一.特性检测:@cc_on 我们可以用IE私有的条件编译(conditional compilation)结合条件注释来提供针对ie10的Hack:该脚本里面的IE排除条件注释,以确保IE6-9不承认 ...
- http所有请求头在Console中打印
1.目标:将http中的请求头全部打印在Console中 2.基本语句 //1.获得指定的头 String header = response.getHeader("User-Agert&q ...
- 建造者(生成器)模式C++、Java实现
1.建造者模式UML 图1. 建造者模式UML 2.C++实现 C++实现类视图: 图2. 建造者模式C++实现的类视图 其中,Product的实现代码是(ProductA和ProductB的代码不再 ...
- js为什么放到head中有时候失效
1.今天写js碰到一个奇怪的问题,写好的js放到body里面执行,但是放到head中没有任何效果,为什么导致这种原因呢? 看失效代码: <!DOCTYPE html PUBLIC "- ...
- JavaEE之JavaWeb核心之Servlet
Servlet简介: Servlet 运行在服务端的Java小程序,是sun公司提供一套规范(接口),用来处理客户端请求.响应给浏览器的动态资源.但servlet的实质就是java代码,通过java的 ...
- hdu 3367 Pseudoforest (最大生成树 最多存在一个环)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3367 Pseudoforest Time Limit: 10000/5000 MS (Java/Oth ...
- 【Web crawler】爬虫之百度首页
刚开始学习爬虫,照着教程手打了一遍,还是蛮有成就感的.使用版本:python2.7 *注意:python2的默认编码是ASCII编码而python3默认编码是utf-8 import urllib2 ...