栈—summertraining#2.A题

You are given a string consisting of parentheses () and []. A string of this type is said to be correct:

(a)
if it is the empty string
(b)
if A and B are correct, AB is correct,
(c)
if A is correct, () and [] is correct.

Write a program that takes a sequence of strings of this type and check their correctness. Your program can assume that the maximum string length is 128.

Input

The file contains a positive integer n and a sequence of n strings of parentheses () and [], one string a line.

Output

A sequence of Yes or No on the output file.

Sample Input

3
([])
(([()])))
([()[]()])()

Sample Output

Yes
No
Yes

代码如下:

 1 #include<iostream>
 2 #include<stdio.h>
 3 #include<stack>
 4 #include<string.h>
 5 using namespace std;
 6
 7 int main()
 8 {
 9     int n;
10     while(scanf("%d",&n)!=EOF)
11     {
12         char stack[128];
13         char str[128];
14         getchar();      //由于gets()把换行符当做结束字符,注意用getchar()吸收换行符。
15         while(gets(str))
16         {
17
18             int i,top=-1;
19             for(i=0;i<strlen(str) ;i++)
20             {
21                 if(str[i]==‘(‘|| str[i]==‘[‘)
22                     stack[++top]=str[i];
23
24
25                 if(str[i]==‘)‘ && stack[top]!=‘(‘)
26                 {
27                     top=0;
28                     break;
29                 }
30                 else if(str[i]==‘]‘ && stack[top]!=‘[‘)
31                 {
32                     top=0;
33                     break;
34                 }
35
36                 if(str[i]==‘)‘ && stack[top]==‘(‘)
37                    top--;
38
39                 else if(str[i]==‘]‘ && stack[top]==‘[‘)
40                     top--;
41
42
43             }
44
45             if(top==-1)
46                 printf("Yes\n");
47             else
48                 printf("No\n");
49         }
50     }
51
52     return 0;
53 }

本来要求是要自己实现栈的操作,可是不熟悉自己写不了,只好用STL暂时先过了题。还参考了大神的代码,看了好几天的书百度很多栈的相关用法,栈的数组表示和栈的代码实现。虽说已经学了一年的C和C++,可感觉自己很不熟悉对于竞赛题恐惧极了。现在在重新补充学习C和C++。无论怎样,每天都要比昨天的自己懂得更多,即使进步微乎其微,也不要轻易放弃。看不见希望是很恐怖难过的事,不被看好也没关系,自己啊,要握住生命的绳不被左右不被打乱pace。

第二周马上要结束了,好好总结。恩。

时间: 2024-12-10 06:28:34

栈—summertraining#2.A题的相关文章

POJ 3494 Largest Submatrix of All 1&#39;s 栈的运用 好题

Language: Default Largest Submatrix of All 1’s Time Limit: 5000MS   Memory Limit: 131072K Total Submissions: 5185   Accepted: 1950 Case Time Limit: 2000MS Description Given a m-by-n (0,1)-matrix, of all its submatrices of all 1’s which is the largest

【常用算法思路分析系列】栈和队列高频题集(修改版)

本文是[常用算法思路分析系列]的第三篇,分析栈和队列相关的高频题目.本文分析:1.可查询最值的栈:2.用两个栈实现队列的功能:3.反转栈中元素:4.排序栈中元素:5.滑动窗口问题. 本系列前两篇导航: [常用算法思路分析系列]排序高频题集 [常用算法思路分析系列]字符串高频题集 1.可查询最值的栈 定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数. 思路: 定义两个栈stackData和stackMin,其中stackData用来存放进栈的数据,stackMin用来存放进栈过

车厢调度(栈的经典入门题)

车厢调度 Time Limit : 3000/1000ms (Java/Other)   Memory Limit : 65535/32768K (Java/Other) Total Submission(s) : 5   Accepted Submission(s) : 2 Font: Times New Roman | Verdana | Georgia Font Size: ← → Problem Description 有一个火车站,每辆火车从A驶入,车厢可以停放在车站C中,或从B方向驶

hrbust/哈理工oj 1677 一个函数【栈】【水题】

一个函数 Time Limit: 1000 MS Memory Limit: 32768 K Total Submit: 49(38 users) Total Accepted: 39(36 users) Rating:  Special Judge: No Description 现在用一个函数来处理一个字符串(该字符串只包含x和y). 函数的两个操作如下. 1.  在字符串中找到两个连续的字符(可以不相邻),并且第一个字符是'y',第二个字符是'x',然后交换它们.如果一次存在多种满足该条件

栈、队列算法题

用栈实现队列,完成队列的Push和Pop操作. 队列中的元素为int类型 //思路 栈只能从栈顶出入,队列从队首出,队尾入,借助两个栈:栈1的顶为队尾,栈2的顶为队首 push 从队尾压入一个元素,从s1压入,栈空和非空情况一样,无返回值 pop 从队首一个弹出元素,s2不空时队首在s2栈顶,s2空时队首在s1栈底,需要先把s1中所有元素依次弹入s2,然后弹出s2栈顶 注意从A中弹出所有元素压入B时,因为A数组改变,所以需要先把数组长度存下来,再使用保存的值控制for循环 如果s1空,队列为空,

LeetCode 225 Implement Stack using Queues(用队列来实现栈)(*)

翻译 用队列来实现栈的例如以下操作. push(x) -- 将元素x加入进栈 pop() -- 从栈顶移除元素 top() -- 返回栈顶元素 empty() -- 返回栈是否为空 注意: 你必须使用一个仅仅有标准操作的队列. 也就是说,仅仅有push/pop/size/empty等操作是有效的. 队列可能不被原生支持.这取决于你所用的语言. 仅仅要你仅仅是用queue的标准操作,你能够用list或者deque(double-ended queue)来模拟队列. 你能够如果全部的操作都是有效的(

uva12265 贩卖土地 单调栈

输入一个n*m的矩阵,每个格子可能是空地,也可能是沼泽.对于每个空地格子,求出以它为右下角的空矩形的最大周长,然后统计每个周长出现了多少次. 输入包含多组测试数据,第一行输入一个正整数N,表示输入样例组数(N<=10)每组测试样例第一行为正整数n和m(1<=n,m<=1000)以下n行,每行包含m个字符,用'#'表示沼泽,'.'表示土地 输出数据包含多行,用"a x b"来表示周长为b的矩形出现了a次,按照矩形周长从小到大排序 16 5..#.#.#...#..##.

浅谈—单调栈

一.概念: 单调栈的本质还是一个栈,只不过是栈的元素从栈底到栈顶单调递增或者是单调递减. 二.单调栈的维护: 每加入一个元素,将这个元素和栈顶元素相比较,(假设你维护的是一个单调递增的栈),如果当前元素大于等于栈顶元素,说明这个元素 没有破坏这个栈的单调性,直接加入:如果当前元素小于栈顶元素,直接向栈中加入元素会破坏栈的单调性,这时我们需要将栈顶元素依次弹出,知道遇到第一个 大于或者等于当前元素的元素,再将该元素压入栈中.时间复杂度O(n),所有的元素都会进栈一次. 三.单调栈的性质: (1)单

【常用算法思路分析系列】与二分搜索相关高频题

本文是[常用算法思路分析系列]的第五篇,总结二分搜索相关的高频题目和解题思路.本文分析如下几个问题:1.求数组局部最小值问题:2.元素最左出现的位置:3.循环有序数组求最小值:4.最左原位:5.完全二叉树计算结点数:6.快速N次方. 本系列前四篇导航: [常用算法思路分析系列]排序高频题集 [常用算法思路分析系列]字符串高频题集 [常用算法思路分析系列]栈和队列高频题集(修改版) [常用算法思路分析系列]链表相关高频题集 二分搜索的重要提醒: 一般我们选择中点进行搜索,会写成mid = (lef