UVA514:https://vjudge.net/problem/UVA-514

HDOJ1022:http://acm.hdu.edu.cn/showproblem.php?pid=1022

思路:


两个题目都是一个思路,给出待进栈的序列和出栈序列,判断出栈序列是否有可能存在

UVA514是《算法竞赛入门经典》P140的例题,HDOJ1022和它是同样的思路

具体请参见代码,举个栗子模拟一下就明白代码的意思了

ac代码:


UVA514

#include <iostream>
#include <cmath>
#include <cstring>
#include <cctype>
#include <algorithm>
#include <stdlib.h>
#include <vector>
#include <stack>
#include <queue>
#include <set>
#include <map>
#include <sstream>
#define maxn 1005
#define inf 1e+9+10
using namespace std;
typedef long long ll;
int n,target[maxn];
int main()
{//freopen("/Users/zhangkanqi/Desktop/11.txt","r",stdin);ios::sync_with_stdio(false);//写了这句话的话就不要再用scanf和printf了!!会wa的while(cin>>n&&n){stack<int> s;while(cin>>target[1]&&target[1]){int a = 1, b = 1;for (int i = 2; i <= n; i++)cin>>target[i];int ok = 1;while (b <= n) {if (a == target[b]) {a++;b++;} else if (!s.empty() && s.top() == target[b]) {s.pop();b++;} else if (a <= n)s.push(a++);else {ok = 0;break;}}printf("%s\n", ok ? "Yes" : "No");}printf("\n");}return 0;
}

HDOJ1022

#include <iostream>
#include <cmath>
#include <cstring>
#include <cctype>
#include <algorithm>
#include <stdlib.h>
#include <vector>
#include <stack>
#include <queue>
#include <set>
#include <map>
#include <sstream>
#define maxn 15
#define inf 1e+9+10
using namespace std;
typedef long long ll;
int n;
char a[maxn],b[maxn];
int main()
{//freopen("/Users/zhangkanqi/Desktop/11.txt","r",stdin);ios::sync_with_stdio(false);int i,j;while(cin>>n){string ss="";for(i=1;i<=n;i++)cin>>a[i];for(i=1;i<=n;i++)cin>>b[i];stack<int> s;while(!s.empty())//最好写上,如果stack是在前面的while外定义的话,就必须要写!!s.pop();i=j=1;int ok=1;while(j<=n){if(a[i]==b[j]&& i<=n)//注意!!一定要加上I<=n的判断条件,不然会wa{//或者将前面写成cin>>a>>b,就不用加i<=n的判断条件了i++;j++;ss+="in\nout\n";}else if(!s.empty()&&s.top()==b[j]){s.pop();j++;ss+="out\n";}else if(a[i]!=b[j]&&i<n){s.push(a[i++]);ss+="in\n";}else{ok=0;break;}}if(ok){cout<<"Yes."<<endl;cout<<ss;}elsecout<<"No."<<endl;cout<<"FINISH"<<endl;}return 0;
}

HDOJ1022:同样的思路,另一种写法,用v[i]=1标记in,0标记out,原博主DoubleQ_在代码中自己写了个栈,也可以直接stack<int> s;

#include <stdio.h>
#include <string.h>
int s[10000];
int v[10000];
char in[10000];
char out[10000];
int main()
{int n,i,j,k,top;while(scanf("%d%s%s",&n,in,out)!=EOF){i=0;j=0;k=0;top=-1;memset(v,0,sizeof(v));while(j<n){if(top==-1 || s[top]!=out[j] && i<n){s[++top]=in[i++];v[k++]=1;}else{if(s[top] == out[j]){top--;++j;v[k++]=0;}elsebreak;}}if(top==-1){printf("Yes.\n");for(i=0;i<k;i++){if(v[i])printf("in\n");elseprintf("out\n");}printf("FINISH\n");}elseprintf("No.\nFINISH\n");}return 0;
}

【UVA514】+【HDOJ1022]:出栈序列的可能性问题相关推荐

  1. 给定入栈序列,判断一个串是否为出栈序列

    剑指offer22:给定入栈序列,判断一个串是否为出栈序列 public static boolean isOutStackSequence(int[] Spush, int[] Spop) {if ...

  2. 栈 - 关于出栈序列,判断合法的出栈序列

    文章目录 1 引例 2 做题方法 3 原因 3.1 选项D(4 3 1 2)的模拟 1 引例 (例)设栈的入栈序列是 1 2 3 4,则下列不可能是其出栈序列的是( ). A. 1 2 4 3 B. ...

  3. PAT甲级1051 Pop Sequence:[C++题解]模拟栈、判断序列是否是合法的出栈序列

    文章目录 题目分析 题目来源 题目分析 来源:acwing 分析: 题意:将1~N压栈,判断给定序列是否是合法的出栈序列. 对于序列1~N中的每个值i,先将其压入栈.然后对于它就有两种处理方法:要么压 ...

  4. 数据结构实验之栈与队列七:出栈序列判定

    Description 给一个初始的入栈序列,其次序即为元素的入栈次序,栈顶元素可以随时出栈,每个元素只能入栈依次.输入一个入栈序列,后面依次输入多个序列,请判断这些序列是否为所给入栈序列合法的出栈序 ...

  5. 序列元素IT面试题——判断合法出栈序列

    本文纯属个人见解,是对前面学习的总结,如有描述不正确的地方还请高手指正~ 在技巧笔试口试上,我们常常会碰到这样一类题型,如给你一个入栈序列,然后再让你判断几个序列是否有可能为它的出栈序列,如: 入栈序 ...

  6. 2-10 [搞定!]出栈序列的合法性 (20 分)

    给定一个最大容量为 M 的堆栈,将 N 个数字按 1, 2, 3, -, N 的顺序入栈,允许按任何顺序出栈,则哪些数字序列是不可能得到的?例如给定 M=5.N=7,则我们有可能得到{ 1, 2, 3 ...

  7. 数据结构实验之栈七:出栈序列判定

    题目描述 给一个初始的入栈序列,其次序即为元素的入栈次序,栈顶元素可以随时出栈,每个元素只能入栈依次.输入一个入栈序列,后面依次输入多个序列,请判断这些序列是否为所给入栈序列合法的出栈序列. 例如序列 ...

  8. [程序人生]: 判断字符串是否为出栈序列

    题目: 给出一个字符串Initial和另一个字符串Detection,判断Detection是否为Initial的一个出栈序列 如:Initial = 123456, Detection = 2136 ...

  9. 详解+G - 数据结构实验之栈与队列七:出栈序列判定

    理解: 出入栈规律之一,如果前面有一个比较大的数,后面有连续的递增顺序,递增顺序>=2个小于前面比较大的数,那么此出栈顺序不可能实现.比如4,1,2,3,5. 思路:输入一个数,然后不断按照顺序 ...

  10. 给定入栈序列,判断出栈序列是否合法

    题目:分别给定入栈序列和出栈序列,然后判断出栈序列是否合法.如入栈序列是[1,3,2,4,5],出栈序列[3,1,2,4,5]是合法的,[3,1,5,2,4]是不合法的. 思路: 判断出栈序列是否合法 ...

最新文章

  1. webapp检测安卓app是否安装并launch
  2. TP5.0 PHPExcel 数据表格导出导入(引)
  3. 02-CSS基础与进阶-day10_2018-09-14-20-38-10
  4. mysql数据库解除外键
  5. AutoLayout bug集合
  6. Tips--解决安装Multisim时出现No software will be installed or removed无法安装的问题
  7. esp32 io速度_乐鑫科技发布 ESP32-S3 芯片,精准聚焦 AIoT 市场
  8. tomcat服务器的虚拟目录,Windows系统下安装Tomcat服务器和配置虚拟目录的方法
  9. response 设置头的类型 (转)
  10. sqoop1.99.6 mysql_Alex的Hadoop菜鸟教程:第6课Sqoop2安装教程
  11. matlab中saveas图片和save变量到不同路径(文件夹)下
  12. 教你如何在交换机上查询并看懂光模块DDM信息
  13. 免费的ftp服务器 linux,免费ftp服务器,3款免费ftp服务器推荐
  14. 如何用一台普通相机拍照红蓝立体3D图片
  15. MySQL数据导入导出方法与工具介绍
  16. Python图形用户界面和游戏开发
  17. steam饥荒服务器配置修改,启动服务器_饥荒联机版快速配置Dedicated Server攻略_饥荒联机版怎么配置服务器_游戏堡...
  18. Python面试高频问题: os.system()和os.popen()的区别
  19. 前序遍历+中序遍历重建二叉树
  20. (HEM/OHEM)hard negative(example)mining难例挖掘 与focal loss、GHM损失函数

热门文章

  1. WF4.0 RC 对比 Beta2 的变化
  2. 一些网络爱好者常用的网络工具
  3. c语言else语句,C# if…else 语句 | 菜鸟教程
  4. Tolua 报错cannot load incompatible bytecode
  5. 谈一下UI框架经常看到Vue的.sync修饰符
  6. android 点击后退按钮,android – 按下后退按钮后重新选择正确的NavigationView菜单项...
  7. android 加载过程,Android View (2) View的加载过程
  8. Nginx+Tomcat关于Session的管理
  9. linux centos挂载数据盘教程
  10. CentOS安装并设置MariaDB