HDU Train Problem I 1022 栈模拟
2024-10-09 08:13:44
题目大意:
给你一个n 代表有n列 火车, 第一个给你的一个字符串 代表即将进入到轨道上火车的编号顺序, 第二个字符串代表的是 火车出来之后到顺序,
分析一下就知道这,这个问题就是栈, 先进后出吗, 就是问你这个编号有没有可能出现, 有可能的话输出顺序,没可能直接输出No
题目分析:
我们用栈进行模拟, 先判断是否有这种出栈的可能, 假如有这种可能的话我们在模拟 一遍出栈的顺就行了。
每一次有新元素入栈我们就判断他是否雨 第二个字符串的第一个元素是否相等, 假如一样, 就让次元素出栈。
代码
#include <iostream>
#include <queue>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <stack>
using namespace std;
#define maxn 15 bool OK(char str1[], char str2[],int n)//判断是否存在这种出栈的可能
{
stack<char> P;
P.push('#');//因为有元素要删除赋值, 不能为空, 我们让第一个元素为‘#’
char ans;
int i, j;
for(i=, j=; i<n; i++)
{
P.push(str1[i]);
ans = P.top();
while(ans == str2[j] )
{
P.pop();
j ++;
ans = P.top();//此处是要赋值判断的, 假如为空的话就无法赋值, 因此我们让第一个元素为‘#’
}
}
if(j == n)
return true;
return false;
} void Putt(char str1[], char str2[],int n)
{
stack<char> P;
P.push('#');
for(int i=, j=; i<n; i++)
{
P.push(str1[i]);
printf("in\n");
char ans = P.top();
while(ans == str2[j])
{
P.pop();
printf("out\n");
j ++;
ans = P.top();
}
}
}
int main()
{
int n;
char str1[maxn], str2[maxn];
while(cin >> n >> str1 >> str2)
{
if(OK(str1, str2, n) )
{
printf("Yes.\n");
Putt(str1,str2,n);
}
else
printf("No.\n"); printf("FINISH\n");
}
return ;
}
最新文章
- VB中键盘每个按键所对应的具体数值是?
- Android&mdash;&mdash;组件简介
- js一些小题(二)
- [ubuntu]deb软件源
- Ajax的简单请求案例
- 说Win7激活
- 再也不要说,jquery动画呆板了
- boost linux 下安装
- 优化函数式编程:向 PHP 移植 Clojure 函数
- Jmeter安装设置
- 查看Linux连接数
- 201521123011《Java程序设计》第11周学习总结
- Pycharm下面出现No R interpreter defined
- Linux基础学习(2)--Linux系统安装
- 【转】Android AlertDialog自定义布局
- sap 给集团分配一个逻辑系统
- win10+wget 收藏
- [PLC]ST语言五:STL/RET/CMP/ZCP
- 如何在Linux上面安装GCC 4.1.2
- Apache Sqoop 结构化、非结构化数据转换工具