2019-2020"新生赛"长沙理工大学程序设计竞赛E题合法括号

题目描述

众所周知,佳爷是集训队最强,他经常喜欢鄙视集训队最菜的PC,这天他又来了,他丢给PC一道题目:

给你一个字符串,该字符串只包含符号 ‘(’ 和 ‘)‘, ,我们称那些左右括号可以一一对应的括号字符串为完美字符串,

比如"()()()",  "((()))", "((()))()()", 都是完美字符串

而"((())", "()(", "((()))()(" 不是完美字符串。

这么难的题目,PC当然是不会写的,但他又不想被佳爷鄙视,所以他找到了你,聪明的ACMer啊,请你帮PC解出这题把

输入描述:

第一行一个整数n,代表字符串的长度 n, 1 <= n <= 1e5

第二行一串字符串s,只包含字符 ‘(‘ , ‘)‘。

输出描述:

如果该字符串是完美字符串,就输出YES,。否则输出NO

示例1

输入

4
(())

输出

YES

思路:括号匹配,左右括号应该相等才能满足题意,先判断下n是不是偶数,如果不是偶数,肯定匹配不了,直接输出NO结束。否则的话就记录下左括号和右括号的数量,并且在每一次的记录中判断是否右括号大于左括号,如果说右括号的数量大于了左括号,那么肯定没有相应的左括号来匹配,最后判断下如果左右括号数量相等的话输出YES,否则输出NO
#include<bits/stdc++.h>
using namespace std;
int main()
{
    int n;
    char a[100100];
    cin>>n;
    getchar();  //读取回车键
    for(int i = 0; i < n; i++) {
        scanf("%c",&a[i]);
    }
    int l = 0,r = 0;
    if(n%2 != 0) {
        cout<<"NO"<<endl;
    }
    else {
        for(int i = 0; i < n; i++) {
            if(a[i] == ‘(‘) {
                l++;
            }
            else if(a[i] == ‘)‘) {
                r++;
            }
            if(l < r) {  //如果说在这个过程中右括号的数量大于左括号,肯定是不能匹配成功的
                cout<<"NO"<<endl;
                return 0;
            }
        }
        if(l == r) {
            cout<<"YES"<<endl;
        }
        else {
            cout<<"NO"<<endl;
        }
    }
    return 0;
}

  

么就是符合题意的

原文地址:https://www.cnblogs.com/clb123/p/12045934.html

时间: 2024-08-29 14:18:38

2019-2020"新生赛"长沙理工大学程序设计竞赛E题合法括号的相关文章

"新生赛"长沙理工大学程序设计竞赛

B.happy card 列出所有条件:人数 n,总的快乐牌 num,限制手牌 m 我们可以 DP 的是:前 i 个人在总牌数为 j 的情况下,第 i个人拿 k 张牌的最大幸福值.想想似乎和01背包有点儿类似,那么状态转移方程也就不难写出来了: dp?[i][j]=max?(dp?[i−1][j−k]+h[k],dp?[i-1][j]) 当然我们的第一维其实可以直接滚动掉的.. 其实算法还可以再进行时间的优化,将其化为 n^2 算法. 实际上人数是一个无用条件,我们知道总的快乐牌数,那么人数一定

2017-5-19-Train:2017年浙江理工大学程序设计竞赛校赛

Problem A: 回文(签到题) Description 小王想知道一个字符串是否为ABA’型字符串.ABA’型字符串的定义:S=ABA’,A,B,A’都是原字符串的子串(不能是空串),A’的意思是A的反转串,B不一定要和A或A’不同.符合ABA’型的例如:"aba”,"acbbca”,"abcefgcba”等."Abcefgcba”是ABA’型,因为它能找到一组对应的A("abc”),B(”efg”)和A’("cba")满足定义.

C 六学家的困惑 【YY】 (2019年华南理工大学程序设计竞赛(春季赛))

冲鸭,去刷题:https://ac.nowcoder.com/acm/contest/625/C 小六喜欢两全其美的事情,今天就正好有一个这样的机会. 小六面前有两根管子,管子里面放满了数字为1到9的小球.每次取球时,小六会先选择一根管子,再从这根管子的某一侧(左侧或右侧)取出一个球.在满足取球规则的情况下,他可以任意顺序取出所有小球.假如小六依次取出的球的编号为a1,a2,?,ana1,a2,?,an,则他最后就得到了一个形如¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯a1a2?ana1a

2019年华南理工大学程序设计竞赛(春季赛)A NB群友

https://ac.nowcoder.com/acm/contest/625/A 题意:给出一个区间范围 , 求有多少个数的每一位的积是在这个区间里面的 分析:没错了 ,就是记忆化暴力搜索 ,不断的枚举除 i ,i是2到9 , 看是否合法 ,  对于枚举到相同的状态的时候 , 后面的价值肯定和上一个状态是一样的 , 所以这样就好拉 #include<bits/stdc++.h> using namespace std; #define ll long long map<ll , ll

2019年华南理工大学程序设计竞赛(春季赛) K Parco_Love_String(后缀自动机)找两个串的相同字串有多少

https://ac.nowcoder.com/acm/contest/625/K 题意: 给出Q 个询问 i , 求 s[0..i-1] 与 s[i...len-1] 有多少相同的字串 分析: 给出了查询 , 容易想到先预处理出答案好吧 , 字符串的问题也容易想到后缀自动机 ,但是我们该怎么使用呢? 下面提供我的思路: 我们建立出SAM后 , 跑一边拓扑排序 ,根据SAM跑出来的拓扑排序的序列特性 , 我们可以求出 在当前状态st 的最大串字符出现的个数 for (int i = now; i

2015年浙江理工大学程序设计竞赛

做了两题 Problem D: 逻辑运算 Description 还记得大学里学过的模电么,今天就让我们将与或非变成一道题吧. 给你一个与或非的表达式,求出这个表达式的值,表达式总共有八种字符. 三种逻辑运算符按照优先级排列如下. ‘!’:表示取反. ‘&’:逻辑与. ‘|’:逻辑或. 两个字符‘T’,‘F‘分别表示true和 false. 另外还有左右括号,空格三种字符.跟一般的表达式一样,括号可以改变优先级. Input 每组数据输入一行字符串,字符串长度小于等于100. Output 输出

2018华南理工大学程序设计竞赛 H-对称与反对称

H-对称与反对称 题目描述 给出一个N*N的方阵A.构造方阵B,C: 使得A = B + C.其中 B为对称矩阵,C为反对称矩阵. 对于方阵S中的任意元素,若(S)ij = (S)ji,则称S为对称矩阵 对于方阵T中的任意元素,若(T)ij = -(T)ji,则称T为反对称矩阵 注意,所有运算在模M意义下 输入描述: 输入包含多组数据,处理到文件结束每组数据,第一行包含两个正整数N,M(1 <= N <= 1000, 1 <= M <= 1000,000,001)分别表示方阵大小与

记TJPUのACM新生赛——Stay young, stay simple

刚看完国家德比来写点什么吧...话说比赛挺无聊,光头也真是命硬. 2016-12-3,12:00-17:00,TJPUのACM新生赛如期举行. 总体来说这次比赛体验还是比我第一次进行5小时比赛的浙江理工大学新生邀请赛要舒服的多(那次浙理工OJ直接爆了...) 然后凭着运气好和各位大佬的不杀之恩混到了第一... 比赛情况大概是上面图片那样,其实写出的题都挺水的,后面的DFS.BFS以及贪心什么的我都没多想...反正不会写. 唯一值得记录的大概是D题,HDOJ上有(5979),是2016ACM/IC

ZSC新生赛 沼跃鱼早已看穿了一切

Description 沼跃鱼打开密码门后发现门后是一个像迷宫一样的房间,墙上的指示牌写着:房间内某处有一宝箱,但是宝箱被上锁了,钥匙在这个房间的某个角落.沼泽鱼对宝箱里有什么很感兴趣,但它必须先去拿到钥匙才可以打开宝箱.然而沼跃鱼早已看穿了一切,它看清了这个房间的布局,现在给出房间的布局图,问沼跃鱼拿到钥匙并打开宝箱最少需要走多少步.沼跃鱼每次只能向上.下.左.右中其中一个方向走一步,但若那个位置是墙时则不能往那个位置走(显然,沼跃鱼不能穿墙). Input 输入的第一行是一个整数T(0<T<