Train Problem I

                                                                                                                Time Limit: 2000/1000
MS (Java/Others)    

                                                                                                             Memory Limit: 65536/32768
K (Java/Others)

                                                                             

可能读完题很多人觉得不用栈,关栈什么事,不过如果代码能力强的话的确不用。主要这题题意还是有点不清楚;

题意:n列火车,串o1是火车进站的先后顺序,串o2是火车出站的先后顺序,注意这只是一个先后次序,并不代表这些火车是一个挨着一个地进(出);题目求如果按o1这种进站次序与o2这种出站次序是否符合实际;

思路:可以直接c语言模拟栈,也可以直接用栈写,但思路都是一样的;我们发现这个火车站的进出次序十分符合栈的特点,每次出去的都是栈顶元素,要判断是否符合实际既是判断进与出的关系,我们可以进来然后出去,然后再进来再进来再出去,因为出去的先后顺序已经确定了,所以进入就相当于入栈,判断栈顶元素是否等于出去的顺序,是则删除栈顶元素然后要出去的火车变成下一列,如此重复,最后所有火车都进站后判断栈是否为空或者判断指向下一列要出去的火车指针是否等于最后出去的火车(这里叙述有点模糊,没关系看以下代码),是则YES,反之,NO;

看栈模拟:

#include<bits/stdc++.h>
using namespace std;
char s1[10],s2[10];
int a[20];
int main()
{
int n,i;
while(~scanf("%d%s%s",&n,s1,s2))
{
memset(a,0,sizeof(a));
stack<char>q;
int k=0,k1=0;
for(i=0; i<n; i++)
{
q.push(s1[i]);//进站相当于入栈;
a[k++]=1;//1表示进;
while(!q.empty()&&q.top()==s2[k1])
{
a[k++]=-1;//-1表示出;
q.pop();
k1++;//指向下一列要出去的火车;
}
}
if(k1==n)//如果栈为空或指针刚好指向最后一列出去的火车则符合实际;
{
printf("Yes.\n");
for(i=0; i<k; i++)
if(a[i]==1)
printf("in\n");
else printf("out\n");
printf("FINISH\n");
}
else printf("No.\nFINISH\n");
}
return 0;
}

看c代码模拟:

#include<bits/stdc++.h>
using namespace std;
char in[10],out[10],s[10];
int a[20];
int main()
{
int n,i;
while(~scanf("%d%s%s",&n,in,out))
{
memset(a,0,sizeof(a));
int x1=strlen(in);
int j=0,k=0,k1=0;
for(i=0; i<x1; i++)
{
s[j]=in[i];//模拟栈相当于入栈;
a[k++]=1;
while(j>=0&&s[j]==out[k1])
{
j--;//相当于删除了栈顶元素;
a[k++]=-1;
k1++;指向下一列要出去的火车;
}
j++;
}
if(k1==n)
{
printf("Yes.\n");
for(i=0; i<k; i++)
if(a[i]==1)
printf("in\n");
else printf("out\n");
printf("FINISH\n");
}
else printf("No.\nFINISH\n");
}
return 0;
}

感觉题意才是最主要的!!!!

HDU-1022Train Problem I,简单栈模拟;的更多相关文章

  1. HDU Train Problem I 1022 栈模拟

    题目大意: 给你一个n 代表有n列 火车,  第一个给你的一个字符串 代表即将进入到轨道上火车的编号顺序, 第二个字符串代表的是 火车出来之后到顺序, 分析一下就知道这,这个问题就是栈, 先进后出吗, ...

  2. HDU 1022 Train Problem I(栈模拟)

    传送门 Description As the new term comes, the Ignatius Train Station is very busy nowadays. A lot of st ...

  3. UVALive 7454 Parentheses (栈+模拟)

    Parentheses 题目链接: http://acm.hust.edu.cn/vjudge/contest/127401#problem/A Description http://7xjob4.c ...

  4. 吐泡泡(2018年全国多校算法寒假训练营练习比赛(第二场)+栈模拟)+Plug-in(codeforces81A+栈模拟)

    吐泡泡题目链接:https://www.nowcoder.com/acm/contest/74/A 题目: 思路: 这种题目当初卡了我很久,今天早训时遇到一个一样得题,一眼就想到用栈模拟,就又回来把这 ...

  5. 【栈模拟dfs】Cells UVALive - 3486

    题目链接:https://cn.vjudge.net/contest/209473#problem/D 题目大意:有一棵树,这棵树的前n个节点拥有子节点,告诉你n的大小,以及这n个节点各有的子节点个数 ...

  6. HDU 1276 士兵队列训练问题(模拟)

    原题代号:HDU 1276 原题链接:http://acm.hdu.edu.cn/showproblem.php?pid=1276 题目原题: 士兵队列训练问题 Time Limit: 2000/10 ...

  7. hdu Train Problem I

    这道题是道简单的栈模拟题,只要按照真实情况用栈进行模拟即可: #include<stdio.h> #include<string.h> #include<stack> ...

  8. HDU 4708 Rotation Lock Puzzle(模拟)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4708 题目大意:给定一个方形矩阵,边长为3-10的奇数.每一圈的数字可以沿着顺时针方向和逆时针方向旋转 ...

  9. poj1363Rails(栈模拟)

    主题链接: id=1363">啊哈哈,点我点我 思路: 这道题就是一道简单的栈模拟. .. .我最開始认为难处理是当出栈后top指针变化了. .当不满足条件时入栈的当前位置怎么办.这时 ...

随机推荐

  1. 官方XmlPullParser和网络解析xml示例及详述

    Parsing XML Data This lesson teaches you to Choose a Parser Analyze the Feed Instantiate the Parser ...

  2. Android偏好设置(6)应用和监听各偏好参数

    Reading Preferences By default, all your app's preferences are saved to a file that's accessible fro ...

  3. 1043 幸运号码 数位DP

    http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1043 设dp[i][j]表示前i位数中,i位数的和为j时的所有情况. 转 ...

  4. sdut2355Binary Search Heap Construction

    链接 捣鼓了一下午..按堆建树 写完交 返回TLE..数据不大 感觉不会超了 无奈拿了数据来看什么奇葩数据会超 发现数据跟我输出不一样 看了好久才明白理解错题意了 给出的字符串有两个标签 按前一个来建 ...

  5. FreeMarker-网页静态化

    网页静态化解决方案在实际开发中运用比较多,例如新闻网站,门户网站中的新闻频道或者是文章类的频道. 网页静态化技术和缓存技术的共同点都是为了减轻数据库的访问压力,但是具体的应用场景不同,缓存比较适合小规 ...

  6. Java8特性之Lambda、方法引用以及Stream流

    Java 8 中的 Streams API 详解:https://www.ibm.com/developerworks/cn/java/j-lo-java8streamapi/ Java笔记——Jav ...

  7. SpringBoot之旅第七篇-Docker

    一.引言 记得上大三时,要给微机房电脑安装系统,除了原生的操作系统外,还要另外安装一些必要的开发软件,如果每台电脑都重新去安装的话工作量就很大了,这个时候就使用了windows镜像系统,我们将要安装的 ...

  8. js实现元素水平垂直居中

    之前有写过css/css3实现元素的水平和垂直居中的几种方法点我,但是css3属性不是所有浏览器都能兼容的,今天写下js实现未知宽高的元素的水平和垂直居中. <!DOCTYPE html> ...

  9. 冒泡排序算法和简单选择排序算法的js实现

    之前已经介绍过冒泡排序算法和简单选择排序算法和原理,现在有Js实现. 冒泡排序算法 let dat=[5, 8, 10, 3, 2, 18, 17, 9]; function bubbleSort(d ...

  10. 总结几点sql语句优化

    一.表设计阶段: 1.主键的使用    a.业务日志表.安全审计表采用自增长:    b.自定义编号用于业务流程类表,根据一定的编号规则:    c.int型主键 用于基础数据表: 2.逻辑删除字段的 ...