20201213STL1总结

STL1总结

STL定义

例题

#10115. 栈练习1

思路

建立一个栈,根据输入的命令来进行模拟。最后如栈空,则输出"impossible!"

代码

/*
ID: zhangbe5
TASK: test
LANG: C++
*/
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int n;
int order,num;
stack<int>s;
int main(){
	scanf("%d",&n);
	for(int i=1;i<=n;i++){
		scanf("%d",&order);
		if(order==1){
			scanf("%d",&num);
			s.push(num);
		}else{
			if(s.empty()){
				printf("impossible!");
				return 0;
			}
			s.pop();
		}
	}
	if(s.empty()){
		printf("impossible!");
	}else{
		printf("%d",s.top());
	}
	return 0;
}

#10062. 括弧匹配检验

思路

建立一个栈,把左括号压入栈中,如遇到右括号,则根据相应的左括号弹出栈顶。如括号不匹或无括号,则说明不匹配。如果遍历完整个字符串还有元素在栈内,则说明不匹配。

代码

/*
ID: zhangbe5
TASK: test
LANG: C++
*/
#include<bits/stdc++.h>
using namespace std;
string s;
stack<char>q; 
bool check(){
	for(int i=0;i<s.size();i++){
		if(s[i]=='('||s[i]=='['){//如为左括号则存入 
			q.push(s[i]);
		}else if(s[i]==')'){//如为右括号,开始判断 
			if(q.empty()){//缺左半括号 
				return false;
			}
			if(q.top()!='('){//无法配对 
				return false;
			}
			q.pop();
		}else if(s[i]==']'){//如为右括号,开始判断 
			if(q.empty()){//缺左半括号 
				return false;
			}
			if(q.top()!='['){//无法配对 
				return false;
			}
			q.pop();
		}
	}
	if(!q.empty())return false;
	else return true;
}
int main(){
	cin>>s;
	if(check()){
		printf("OK");
	}else{
		printf("Wrong");
	}
	return 0;
}

#10063. 车厢调度

思路

构造一个栈,将\(n\)个元素压入栈内,从而根据序列来判断是否存在这个序列。

代码

/*
ID: zhangbe5
TASK: test
LANG: C++
*/
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int n,a[1010],b[1010],head;
int main(){
	scanf("%d",&n);
	for(int i=1;i<=n;i++){
		scanf("%d",&a[i]);
	}
	for(int i=1,k=1;i<=n;++i){
		while(k<=a[i]){
			b[++head]=k;
			++k;
		}
		if(b[head]==a[i]){
			--head;
		}else{
			printf("NO");
			return 0;
		}
	}
	printf("YES");
	return 0;
}
posted @ 2020-12-15 21:41  小罐猹  阅读(126)  评论(0编辑  收藏  举报