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. 动态规划:最大连续子序列乘积 分类: c/c++ 算法 2014-09-30 17:03 656人阅读 评论(0) 收藏

    题目描述: 给定一个浮点数序列(可能有正数.0和负数),求出一个最大的连续子序列乘积. 分析:若暴力求解,需要O(n^3)时间,太低效,故使用动态规划. 设data[i]:第i个数据,dp[i]:以第 ...

  2. 等待进程结束函数中的BUG

    偶然发现一个BUG,有一个函数是这样写的: void WaitProcExit(DWORD dwPid) { HANDLE hProcess = OpenProcess(PROCESS_ALL_ACC ...

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

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

  4. 桥接模式和php实现

    桥接模式(Bridge Pattern): 将抽象部分与它的实现部分分离,使它们都可以独立地变化.它是一种对象结构型模式,又称为柄体(Handle and Body)模式或接口(Interface)模 ...

  5. 【转】qqface使用实例

    原网址:http://www.xwcms.net/js/bddm/51565.html <div id="show"></div>   <div cl ...

  6. Java Threads - The volatile keyword

    在网上看到很多关于 volatile 关键字的说明和使用问题, 今天引用Java Threads中的解释,感觉全面而详细,可惜是英文的. 这里很清晰的揭示了volatile 本身并不处理java读取数 ...

  7. iOS-UI控件之UITableView(三)- 自定义不等高的cell

    Storyboard_不等高 对比自定义等高cell,需要几个额外的步骤(iOS8开始才支持) 添加子控件和contentView之间的间距约束 设置tableViewCell的真实行高和估算行高 / ...

  8. 在 Windows Server 上搭建 *** 服务端(转载加亲测)

    转载自:https://diveng.io/build-shadowsocks-server-on-windows-server.html 下面的教程建议大家使用第一种方法安装,说是比较简单.我则使用 ...

  9. pthread Win32多线程编程的一些知识和感想

    研究遗传算法的一大诟病就是每次运行程序的结果并不是完全一样的,有时候能找到最优解有时候找不到最优解,这就是遗传算法的概率性导致的.那么怎么评价你的方法的好坏呐,这时候就要多次独立运行程序最后取结果的平 ...

  10. iis 配置文件解决跨域问题

    <system.webServer> <httpProtocol> <customHeaders> <add name="Access-Contro ...