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;
}
她透过我的血,看到了另一抹殷红