求助万能的谷民 (违规紫衫)
  • 板块灌水区
  • 楼主Liziya
  • 当前回复2
  • 已保存回复2
  • 发布时间2024/11/1 19:40
  • 上次更新2024/11/1 21:44:46
查看原帖
求助万能的谷民 (违规紫衫)
1292574
Liziya楼主2024/11/1 19:40

这题是道#站外题# 本蒟蒻这道题只有4545分 求调 QAQ

题目链接

题目描述:

字符串中只含有括号(),[], <>,{},判断输入的字符串中括号是否匹配。如果括号有互相包含的形式,从内到外必须是 <>, (), [], {},例如。输入:[()]输出:YES,而输入 ([])([)]都应该输出NO。

输入格式

第一行为一个整数nn,表示以下有多少个由括号组成的字符串。

接下来的nn行,每行都是一个由括号组成的长度不超过255255的字符串。

输出格式

在输出文件中有nn行,每行都是YES或NO。

输入样例

5
{}{}<><>()()[][]
{{}}{{}}<<>><<>>(())(())[[]][[]]
{{}}{{}}<<>><<>>(())(())[[]][[]]
{<>}{[]}<<<>><<>>>((<>))(())[[(<>)]][[]]
><}{{[]}<<<>><<>>>((<>))(())[[(<>)]][[]]

输出样例

YES
YES
YES
YES
NO

本蒟蒻4545分的逆天代码

#include<bits/stdc++.h>
using namespace std;
int n;
string s;
int J(string s){
	stack<char> a;
	char t;
	char x[4]={'(','[','<','{'};
	char y[4]={')',']','>','}'};
	for(int i=0;i<s.size();i++){
		for(int j=0;j<4;j++){
			if(s[i]==x[j]){
				a.push(s[i]);
				break;
			}
		}
		for(int j=0;j<4;j++){
			if(s[i]==y[j]){
				if(a.empty())return 0;
				t=a.top();
				a.pop();
				if(t!=x[j])return 0;
				break;		
			}
		}
	}
	return 1;
}
int main(){
	cin>>n;
	for(int i=0;i<n;i++){
		cin>>s;
		if(J(s)==1)printf("YES\n");
		else printf("NO\n");
	}
	return 0;
}
2024/11/1 19:40
加载中...