【题解】Luogu1739 表达式括号匹配
2020-04-07 01:25:18来源:博客园 阅读 ()
【题解】Luogu1739 表达式括号匹配
提示:
这是一篇良心博客。
在这里,你会看到所有你可能踩到的坑。
所以,作者用这个方式来掩饰自己超蒻……
踩坑路程
一眼看过去,水题一个!随手写了这么一个代码:
#include <bits/stdc++.h>
int main(){
char c;
int flag = 0;
while(c = getchar()&& c != '@'){
if(c == '(')flag++;
else if(c == ')') flag --;
}
std::cout << !flag?"YES":"NO";
}
结果:
(艹测评机你不打脸会死啊喂)
然后,改为do-while
:
#include <bits/stdc++.h>
int main(){
char c;
int flag = 0;
do{
c = getchar();
if(c == '(')flag++;
else if(c == ')') flag --;
}while(c != '@');
std::cout << !flag?"YES":"NO";
}
再 次 吐 血
再次思考,考虑到:)(
这种匹配方式,那么加个特判:
#include <bits/stdc++.h>
int main(){
char c;
int flag = 0,i = 0;
do{
c = getchar();
if(!i && c == ')'){std::cout << "NO";return 0;}
if(c == '(')flag++;
if(c == ')') flag --;
i++;
}while(c != '@');
std::cout << !flag?"YES":"NO";
}
再 次 吐 血
无奈下载了一个数据看了下……
艹!还有一个\n
!
再次修改代码:
#include <bits/stdc++.h>
int main(){
char c;
int flag = 0,i = 0;
do{
c = getchar();
if(!i && c == ')'){std::cout << "NO" << '\n';return 0;}
if(c == '(')flag++;
if(c == ')') flag --;
i++;
}while(c != '@');
std::cout << (!flag?"YES":"NO") << '\n';
}
我…………
再次点开一个数据:
(a*2*3+1*2+3)+(3*2)+(1*2))1*1(@
^ ^
哦哦哦还有个特判!结尾'('的情况!
再次修改:
#include <bits/stdc++.h>
int main(){
char c = ' ',before;
int flag = 0,i = 0;
do{
before = c;
c = getchar();
if(!i && c == ')'){std::cout << "NO" << '\n';return 0;}
if(c == '(')flag++;
if(c == ')') flag --;
if(before == '(' && c == '@'){std::cout << "NO" << '\n';return 0;}
i++;
}while(c != '@');
std::cout << (!flag?"YES":"NO") << '\n';
}
还有?!再次点开数据:
(0)*(2+2)*)3+4((3+10)@
看到这个数据,我突然发现问题就在我的思路上,考虑不到)(
这个情况。
但是能不能顺着我的思路继续做呢?完 全 可 以。
考虑到如果出现)(
的话,会出现:
flag = 0
c = ) flag-- -> flag = -1
^^
负数!那么修改一下:
#include <bits/stdc++.h>
int main(){
char c = ' ',before;
int flag = 0,i = 0;
do{
before = c;
c = getchar();
if(!i && c == ')'){std::cout << "NO" << '\n';return 0;}
if(c == '(')flag++;
if(c == ')')flag--;
if(flag < 0){std::cout << "NO" << '\n';return 0;}
if(before == '(' && c == '@'){std::cout << "NO" << '\n';return 0;}
i++;
}while(c != '@');
std::cout << (!flag?"YES":"NO") << '\n';
}
坑的总结
- 没看到换行
(
结尾的特判没注意)(
的情况flag
依然等于0
导致错误
留个赞再走会死吗
原文链接:https://www.cnblogs.com/sdltf/p/12651331.html
如有疑问请与原作者联系
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
下一篇:STL之stack
- Unsolved --> Solved OJ思路题解 2020-05-30
- C++98/11/17表达式类别 2020-05-23
- 表达式·表达式树·表达式求值 2020-04-29
- 定位new表达式与显式调用析构函数 2020-04-20
- 【题解】Building Strings Gym - 102152E 2020-03-31
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash