电子学会五级数据结构-栈

匹配括号的判定
https://iai.sh.cn/problem/561
匹配括号(一)
https://iai.sh.cn/problem/614

表达式括号匹配
https://www.luogu.com.cn/problem/P1739

#include<bits/stdc++.h>
using namespace std;
//lcnt 左括号剩余数量
//rcnt 右括号剩余数量 
int lcnt,rcnt;
int main(){
	string str;
	cin>>str;
	for(int i=0;i<str.size();i++){
		if(str[i]=='('){//出现左括号 lcnt++ 
			lcnt++;
		}else if(str[i]==')'){
			if(lcnt>0){//出现右括号 有左括号匹配 lcnt-- 消耗左括号 
				lcnt--;
			}else{//出现右括号 没有左括号匹配 rcnt++ 
				rcnt++;	
			}
		}
	}
	if(lcnt==0 && rcnt==0){//左括号 和 右括号同时都没有剩余 匹配 
		cout<<"YES";
	}else{//任意有剩余 不匹配 
		cout<<"NO";
	}
}

铁轨 Rails
https://www.luogu.com.cn/problem/UVA514
[NOIP2003 普及组] 栈
https://www.luogu.com.cn/problem/P1044

#include<bits/stdc++.h>
using namespace std;

int f[20][20];//f[i][j] i未进栈  j已进栈 方案数 
int n; 
int main(){
	cin>>n;
	for(int j=0;j<=n;j++){
		f[0][j]=1;//都进制 出栈的方案数为1 
	}
	
	for(int i=1;i<=n;i++){
		for(int j=0;j<=n;j++){
			if(j==0){
				f[i][j]=f[i-1][j+1];// 栈没有时 只进栈  即:i-1 j+1 
			}else{
//				         进栈push  + 出栈 pop 
				f[i][j]=f[i-1][j+1]+f[i][j-1];
			} 
		}
	}
	cout<<f[n][0];//n个数未进栈 栈内有0个数的情况 
}

平衡的括号 Parentheses Balance
https://www.luogu.com.cn/problem/UVA673
【深基15.习9】验证栈序列
https://www.luogu.com.cn/problem/P4387
括号序列
https://www.luogu.com.cn/problem/P1241

posted @ 2022-05-07 14:49  new-code  阅读(28)  评论(0编辑  收藏  举报