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. ACMer需要的 java基本知识

    1.基本定义 import java.util.*; import java.io.*; public class Main { public static void main(String[] ar ...

  2. 条件DP UVA 672 Gangsters

    题目传送门 题意:n个歹徒进饭店,可变化宽度的门,范围[0, k],每个歹徒进门在ti时间进门,身材si,进去后有pi的成功值,问最大的成功值 分析:首先按照进门时间排序,dp[i][j] 表示第i个 ...

  3. time模块,datetime模块

    time模块 time模块是包含各方面对时间操作的函数. 尽管这些常常有效但不是所有方法在任意平台中有效. 时间相关的操作,时间有三种表示方式: 时间戳               1970年1月1日 ...

  4. Android开机自启动

    1.原理 当Android启动时,会发出一个系统广播,内容为ACTION_BOOT_COMPLETED,它的字符串常量表示为 android.intent.action.BOOT_COMPLETED. ...

  5. solr 管理页面详解

    solr 服务器管理界面可以查看系统状态.solr设置.分词检测.查询索引.增减core.查看日志等 1.Dashboard(仪表盘) 访问http://localhost:8080/solr时,出现 ...

  6. [转]C#Linq中的Union All/Union/Intersect和Top/Bottom和Paging和SqlMethods,skip,take,takewhile,skipwhile,编译查询等

    本文转自:http://www.cnblogs.com/suizhikuo/p/3791799.html 我们继续讲解LINQ to SQL语句,这篇我们来讨论Union All/Union/Inte ...

  7. String的用法——判断功能

    package cn.itcast_03; /* String的判断功能: 1.boolean equals(Object obj):字符串的内容是否相同,区分大小写 2.boolean equals ...

  8. Android IJKPlayer缓冲区设置以及播放一段时间出错解决方案

    IJKPlayer拖动播放进度会导致重新请求数据,未使用已经缓冲好的数据,所以应该尽量控制缓冲区大小,减少不必要的数据损失. mMediaPlayer.setOption(IjkMediaPlayer ...

  9. mysql中int(1)与int(10)的区别

    INT[(M)] [UNSIGNED] [ZEROFILL] 普通大小的整数.带符号的范围是-2147483648到2147483647.无符号的范围是0到4294967295. INT(1) 和 I ...

  10. asterisk-java ami5 分机状态,挂机原因之类的

    这些东西网上随便一找一大堆,也只是记录下自己找的.方便以后自己复制粘贴用. 最后为啦实现分机状态在web的实时更新,我选择啦使用websocket. //获得分机状态 public static St ...