zoukankan      html  css  js  c++  java
  • 【记录】洛谷P1739-表达式括号匹配AC记

    题面请查看:https://www.luogu.org/problem/P1739

    思路:

    见到括号就搜索,搜到与它配对的括号为止,搜不到就输出NO

    代码:

    
    #include <bits/stdc++.h>
    using namespace std;
    int main() {
    	string aa;
    	getline(cin,aa,'@');
    	if(aa.size()==0) {
    		cout<<"NO"<<endl;
    		return 0;
    	}
    	int r = 0,l = 0;
    	for(int i=0;i<aa.size();++i) {
    		if(aa[i]=='(') {
    			bool flag = false;
    			for(int j = i;j<aa.size();++j) {
    				if(aa[j]==')') {
    					flag++;
    				}
    			}
    			if(!flag) {
    				cout<<"NO";
    				return 0;
    			}
    		}
    		if(aa[i]==')') {
    			bool flag = false;
    			for(int j = i;j>0;--j) {
    				if(aa[j]=='(') {
    					flag++;
    				}
    			}
    			if(!flag) {
    				cout<<"NO";
    				return 0;
    			}
    		}
    	}
    	
    	cout<<"YES";
    }
    
    

    70分。

    改正思路:

    1. vis数组记录每一个括号的访问情况,避免重复。
    2. 如果当前括号被匹配过了就没有必要看了,直接continue;
    3. 每次要找一个没用过的括号匹配。

    改后代码:

    #include <bits/stdc++.h>
    using namespace std;
    bool vis[2001] = {0};
    int main() {
    	string aa;
    	getline(cin,aa);
    	if(aa.size()==0) {
    		cout<<"NO"<<endl;
    		return 0;
    	}
    	int r = 0,l = 0;
    	for(int i=0;i<aa.size();++i) {
            if(vis[i]) {
                continue;
            }
    		if(aa[i]=='(') {
    			bool flag = false;
    			for(int j = i;j<aa.size();++j) {
    				if(aa[j]==')'&&vis[j]==0) {
    					flag++;
                        vis[j]++;
                        vis[i]++;
                        break;
    				}
    			}
    			if(!flag) {
    				cout<<"NO";
    				return 0;
    			}
    		}
    		if(aa[i]==')') {
    			bool flag = false;
    			for(int j = i;j>=0;--j) {
    				if(aa[j]=='('&&vis[j]==0) {
    					vis[j]++;
                        vis[i]++;
                        flag++;
                        break;
    				}
    			}
    			if(!flag) {
    				cout<<"NO";
    				return 0;
    			}
    		}
    	}
    	
    	cout<<"YES";
    }
    

    其实细节上也改了一些的。

  • 相关阅读:
    gcc/g++命令参数笔记
    周总结
    帆软FineBI试用
    C++输入流
    tt
    linux6 安装oracle11g
    linux下修改/dev/shm tmpfs文件系统大小
    centos6.5_x86_64 下安装 Oracle11gR2 的详细过程
    Linux Network配置
    安装KornShell(KSH)
  • 原文地址:https://www.cnblogs.com/littlefrog/p/11939501.html
Copyright © 2011-2022 走看看