标签:括号 des 过程 程序 判断 竞赛 namespace 并且 item
众所周知,佳爷是集训队最强,他经常喜欢鄙视集训队最菜的PC,这天他又来了,他丢给PC一道题目:
给你一个字符串,该字符串只包含符号 ‘(’ 和 ‘)‘, ,我们称那些左右括号可以一一对应的括号字符串为完美字符串,
比如"()()()", "((()))", "((()))()()", 都是完美字符串
而"((())", "()(", "((()))()(" 不是完美字符串。
这么难的题目,PC当然是不会写的,但他又不想被佳爷鄙视,所以他找到了你,聪明的ACMer啊,请你帮PC解出这题把
第一行一个整数n,代表字符串的长度 n, 1 <= n <= 1e5
第二行一串字符串s,只包含字符 ‘(‘ , ‘)‘。
如果该字符串是完美字符串,就输出YES,。否则输出NO
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; }
么就是符合题意的
2019-2020"新生赛"长沙理工大学程序设计竞赛E题合法括号
标签:括号 des 过程 程序 判断 竞赛 namespace 并且 item
原文地址:https://www.cnblogs.com/clb123/p/12045934.html