PAT 堆栈操作合法性
2016-03-24 21:22
751 查看
5-5 堆栈操作合法性 (20分)
假设以
50≤50)是堆栈的最大容量。随后N行,每行中给出一个仅由
假设以
S和
X分别表示入栈和出栈操作。如果根据一个仅由
S和
X构成的序列,对一个空堆栈进行操作,相应操作均可行(如没有出现删除时栈空)且最后状态也是栈空,则称该序列是合法的堆栈操作序列。请编写程序,输入
S和
X序列,判断该序列是否合法。
输入格式:
输入第一行给出两个正整数N和M,其中N是待测序列的个数,M(\le50≤50)是堆栈的最大容量。随后N行,每行中给出一个仅由
S和
X构成的序列。序列保证不为空,且长度不超过100。
输出格式:
对每个序列,在一行中输出YES如果该序列是合法的堆栈操作序列,或
NO如果不是。
输入样例:
4 10 SSSXXSXXSX SSSXXSXXS SSSSSSSSSSXSSXXXXXXXXXXX SSSXXSXXX
输出样例:
YES NO NO NO
#include <stdio.h> #include <string.h> #include <iostream> #include <algorithm> #include <stack> using namespace std; stack<char> ss; char a[1000]; int len, sum; int main(){ int N, M, i, count; scanf("%d%d", &N, &M); getchar(); while(N--){ while(!ss.empty()) ss.pop(); count = 0; sum = 0; gets(a); //printf("%s\n", a); len = strlen(a); for(i = 0; i < len; ++i){ if(a[i] == 'S'){ ss.push(a[i]); ++sum; if(sum > M){ printf("NO\n"); count = 1; break; } } else { if(ss.empty()){ printf("NO\n"); count = 1; break; } else { ss.pop(); --sum; } } } if(count == 0 && ss.empty()) printf("YES\n"); else if(count == 0 && !ss.empty()) printf("NO\n"); } return 0; }
相关文章推荐
- Android代码设置Shape,corners,Gradient
- BZOJ 2763 飞行线路
- PDO数据库访问抽象层
- HDU 2018 母牛的故事(递推呀...)
- 恒生校招笔试题
- BZOJ2957 楼房重建
- 基于SpringBoot的通用设备操作接口服务
- for update [of] 语句
- Problem I
- 关于shell的几个不为人知却十分有用的命令分享
- Android 混淆问题集锦
- PAT 符号配对
- Linux GCC常用命令
- HDOJ 1017 A Mathematical Curiosity
- 剑指offer 11二进制中1的个数
- 第三周项目四(1)-百钱百鸡问题
- HDOJ 1017 A Mathematical Curiosity
- JAVA之大数处理,有简单方法不用是sb
- 狄拉克δ函数的导数
- java socket编程