洛谷 P1739 表达式括号匹配【STL/stack/模拟】

题目描述
假设一个表达式有英文字母(小写)、运算符(+,—,*,/)和左右小(圆)括号构成,以“@”作为表达式的结束符。请编写一个程序检查表达式中的左右圆括号是否匹配,若匹配,则返回“YES”;否则返回“NO”。表达式长度小于255,左圆括号少于20个。

输入输出格式
输入格式:
一行:表达式

输出格式:
一行:“YES” 或“NO”

输入输出样例
输入样例#1:
2*(x+y)/(1-x)@

输出样例#1:
YES
输入样例#2:
(25+x)(a(a+b+b)@
输出样例#2:
NO
说明
表达式长度小于255,左圆括号少于20个

【STL】

#include<algorithm>
#include<cstdio>
#include<iostream>
#include<set>
#include<sstream>
#include<cmath>
#include<queue>
#include<stack>
#include<map>
#include<string>
#include<cstring>
#include<string.h>
using namespace std;
const int maxn = 1e5+5;
char s[maxn];
stack<char> st;
int main()
{
    cin>>s;
    for(int i=0; s[i]!='@'; i++)
    {
        if(s[i]=='(') st.push(s[i]);
        if(s[i]==')'){
            if(st.empty()){
                cout<<"NO"<<endl;
                return 0;
            }
            else st.pop();
        }
    }
    if(!st.empty()) printf("NO\n");
    else printf("YES\n");
    return 0;
}

【数组模拟】

#include<algorithm>
#include<cstdio>
#include<iostream>
#include<set>
#include<sstream>
#include<cmath>
#include<queue>
#include<stack>
#include<map>
#include<string>
#include<cstring>
#include<string.h>
using namespace std;
const int maxn = 1e5+5;
char s[maxn];
stack<char> st;
int main()
{
    int top=0;
    cin>>s;
    for(int i=0; s[i]!='@'; i++)
    {
        if(s[i]=='(') top++;
        if(s[i]==')'){
            if(top) top--;
            else {cout<<"NO"<<endl;return 0;}
        }
    }
    if(top) printf("NO\n");
    else printf("YES\n");
    return 0;
}

原文地址:https://www.cnblogs.com/Roni-i/p/9070040.html

时间: 2024-10-14 04:31:42

洛谷 P1739 表达式括号匹配【STL/stack/模拟】的相关文章

P1739 表达式括号匹配

题目描述 假设一个表达式有英文字母(小写).运算符(+,—,*,/)和左右小(圆)括号构成,以“@”作为表达式的结束符.请编写一个程序检查表达式中的左右圆括号是否匹配,若匹配,则返回“YES”:否则返回“NO”.表达式长度小于255,左圆括号少于20个. 输入输出格式 输入格式: 一行:表达式 输出格式: 一行:“YES” 或“NO” 输入输出样例 输入样例#1: ① 2*(x+y)/(1-x)@ ② (25+x)*(a*(a+b+b)@ 输出样例#1: ① YES ② NO 说明 表达式长度小

Comet OJ 热身赛(K题)principal(括号匹配问题+stack模拟)

principal 已经提交 已经通过 23.66% Total Submission:131 Total Accepted:31 题目描述 阿尔比恩王国潜伏着代号白鸽队''的一群间谍.在没有任务的时候,她们会进行各种各样的训练,比如快速判断一个文档有没有语法错误,这有助于她们鉴别写文档的人受教育程度. 这次用于训练的是一个含有nn个括号的文档.括号一共有mm种,每种括号都有左括号和右括号两种形式.我们定义用如下的方式定义一个合法的文档: 1.一个空的字符串是一个合法的文档. 2.如果A,B都是

表达式括号匹配(栈)

1386: 表达式括号匹配 时间限制: 1 Sec  内存限制: 128 MB提交: 12  解决: 9[提交][状态][讨论版] 题目描述 假设一个表达式有英文字母(小写).运算符(+,-,*,/)和左右小(圆)括号构成,以"@"作为表达式的结束符.请编写一个程序检查表达式中的左右圆括号是否匹配,若匹配,则返回"YES":否则返回"NO".表达式长度小于255,左圆括号少于20个. 输入 包括一行数据,即表达式 输出 包括一行,即"Y

洛谷P1290 欧几里德的游戏 数学 博弈论 模拟

洛谷P1290 欧几里德的游戏 数学 博弈论 模拟 这道题我们因为当 x 大于 y 时 你也只能在合法范围 内取 1 个 y 两个 y 也就是说 能取的y大于等于2时,则你本质不同的取法共有两种,此时你必定获胜,因为本质不同,而在最优策略下,则说明胜利者也不同,也就是说这时候你可以决定自己的输赢 ,我们称这种必胜局为 v 局 2.但是如果 v 局后面还有v 局怎么办,这个不必担心,因为先拿到 v局的人,有两种本质不同的取法,也就是说 他可以控制自己下次必定拿到 v 局,这样就 能确保胜利了 所以

1353表达式括号匹配(stack)

[题目描述] 假设一个表达式有英文字母(小写).运算符(+,-,*,/)和左右小(圆)括号构成,以"@"作为表达式的结束符.请编写一个程序检查表达式中的左右圆括号是否匹配,若匹配,则返回"YES":否则返回"NO".表达式长度小于255,左圆括号少于20个. [输入] 一行数据,即表达式. [输出] 一行,即"YES" 或"NO". [输入样例] 2*(x+y)/(1-x)@[输出样例] YES[提示] [

表达式括号匹配配对判断问题

1 #include <iostream> 2 #include <string> 3 #include <cstdio> 4 #include <stack> 5 using namespace std; 6 7 int main() 8 { 9 int n; 10 string ch; 11 cout << "输入表达式数目: "; 12 cin >> n; 13 while (n--) { 14 stack&

计蒜客 括号匹配(stack+map)

题意 蒜头君在纸上写了一个串,只包含'('和')'.一个'('能唯一匹配一个')',但是一个匹配的'('必须出现在')'之前.请判断蒜头君写的字符串能否括号完全匹配,如果能,输出配对的括号的位置(匹配的括号不可以交叉,只能嵌套). 输入格式 一行输入一个字符串只含有'('和')',输入的字符串长度不大于50000. 输出格式 如果输入括号不能匹配,输出一行"No",否则输出一行"Yes",接下里若干行每行输出 2 个整数,用空格隔开,表示所有匹配对的括号的位置(下标

表达式括号匹配

题目描述 假设一个表达式有英文字母(小写).运算符(+,-,*,/)和左右小(圆)括号构成,以"@"作为表达式的结束符.请编写一个程序检查表达式中的左右圆括号是否匹配,若匹配,则返回"YES":否则返回"NO".表达式长度小于255,左圆括号少于20个. AC代码 #include <bits/stdc++.h> using namespace std; int top=0; inline int read() { int w=0,x

洛谷P1310 表达式的值

P1310 表达式的值 题目描述 对于1 位二进制变量定义两种运算: 运算的优先级是: 先计算括号内的,再计算括号外的. “× ”运算优先于“⊕”运算,即计算表达式时,先计算× 运算,再计算⊕运算.例如:计算表达式A⊕B × C时,先计算 B × C,其结果再与 A 做⊕运算. 现给定一个未完成的表达式,例如_+(_*_),请你在横线处填入数字0 或者1 ,请问有多少种填法可以使得表达式的值为0 . 输入输出格式 输入格式: 输入文件名为exp.in ,共 2 行. 第1 行为一个整数 L,表示