HDU-1022Train Problem I,简单栈模拟;
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,简单栈模拟;的更多相关文章
- HDU Train Problem I 1022 栈模拟
题目大意: 给你一个n 代表有n列 火车, 第一个给你的一个字符串 代表即将进入到轨道上火车的编号顺序, 第二个字符串代表的是 火车出来之后到顺序, 分析一下就知道这,这个问题就是栈, 先进后出吗, ...
- HDU 1022 Train Problem I(栈模拟)
传送门 Description As the new term comes, the Ignatius Train Station is very busy nowadays. A lot of st ...
- UVALive 7454 Parentheses (栈+模拟)
Parentheses 题目链接: http://acm.hust.edu.cn/vjudge/contest/127401#problem/A Description http://7xjob4.c ...
- 吐泡泡(2018年全国多校算法寒假训练营练习比赛(第二场)+栈模拟)+Plug-in(codeforces81A+栈模拟)
吐泡泡题目链接:https://www.nowcoder.com/acm/contest/74/A 题目: 思路: 这种题目当初卡了我很久,今天早训时遇到一个一样得题,一眼就想到用栈模拟,就又回来把这 ...
- 【栈模拟dfs】Cells UVALive - 3486
题目链接:https://cn.vjudge.net/contest/209473#problem/D 题目大意:有一棵树,这棵树的前n个节点拥有子节点,告诉你n的大小,以及这n个节点各有的子节点个数 ...
- HDU 1276 士兵队列训练问题(模拟)
原题代号:HDU 1276 原题链接:http://acm.hdu.edu.cn/showproblem.php?pid=1276 题目原题: 士兵队列训练问题 Time Limit: 2000/10 ...
- hdu Train Problem I
这道题是道简单的栈模拟题,只要按照真实情况用栈进行模拟即可: #include<stdio.h> #include<string.h> #include<stack> ...
- HDU 4708 Rotation Lock Puzzle(模拟)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4708 题目大意:给定一个方形矩阵,边长为3-10的奇数.每一圈的数字可以沿着顺时针方向和逆时针方向旋转 ...
- poj1363Rails(栈模拟)
主题链接: id=1363">啊哈哈,点我点我 思路: 这道题就是一道简单的栈模拟. .. .我最開始认为难处理是当出栈后top指针变化了. .当不满足条件时入栈的当前位置怎么办.这时 ...
随机推荐
- magento 用程序生成优惠劵码
参考自http://fragmentedthought.com/fragments/programatically-creating-sales-rule-coupon-code 上面的代码只能生成C ...
- Optimizing Downloads for Efficient Network Access
Optimizing Downloads for Efficient Network Access Previous Next 1.This lesson teaches you to Unders ...
- iOS开发系列--通知与消息机制--转
来自:http://www.cocoachina.com/ios/20150318/11364.html 概述 在多数移动应用中任何时候都只能有一个应用程序处于活跃状态,如果其他应用此刻发生了一些用户 ...
- Proactive Patching Overview
1.Proactive Patching Overview Between Patch Set releases, Oracle's proactive patching program provid ...
- 关于tomcat一些简介
window下,在tomcat的bin目录下,用cmd输入startup.bat 即可启动tomcat 成功启动Tomcat后,通过访问http://localhost:8080/便可以使用Tomca ...
- paint之Graphics
在paint方法里面,这个Graphics类就相当于一支画笔.而且就画在那个component里面,比如frame. 看例子代码: import java.awt.*; public class Te ...
- [转]MySQL游标的使用
转自:http://www.cnblogs.com/sk-net/archive/2011/09/07/2170224.html 以下的文章主要介绍的是MySQL游标的使用笔记,其可以用在存储过程的S ...
- jquery判断checkbox最多选几个
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8&qu ...
- JDBC基础学习
1.概念:java数据库连接技术 2.JDBC:是一个规范,提供接口(面向接口编程) 3.JDBC API:提供程序员调用的接口和类,集成在java.sql 和javax.sql包中.如:Driver ...
- Spring Cloud是什么?
[学习笔记] 3)Spring Cloud是什么?马克-to-win@马克java社区:i)Spring Cloud是一个微服务框架,Spring Cloud基于微服务基础框架Netflix进行了up ...