目录
[P1427 小鱼的数字游戏 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)](#P1427 小鱼的数字游戏 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn))
[P1739 表达式括号匹配 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)](#P1739 表达式括号匹配 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn))
[B3614 【模板】栈 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)](#B3614 【模板】栈 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn))
小鱼的数字游戏
P1427 小鱼的数字游戏 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)
思路:模拟+stl的stack
关于stack的操作:
std::stack<type> s :定义一个type类型的栈
s.push(x) :把x放入栈中
s.top() :取出栈顶元素,但不删除
s.pop() :删除栈顶元素
s.size() :返回栈中元素的数量
s.empty() :判断栈中是否为空(栈不空:while(!s.empty()) )
完整代码:
cpp
#include <bits/stdc++.h>
#define int long long
signed main() {
int t;
std::stack<int> s;
while (std::cin >> t) {
if (t == 0)
break;
else {
s.push(t);
}
}
while (!s.empty()) {
std::cout << s.top() << " ";
s.pop();
}
return 0;
}
表达式括号匹配
P1739 表达式括号匹配 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)
思路:模拟+stl的stack
遇到左括号就进栈,遇到右括号并且栈不空的时候,栈顶元素出栈
完整代码:
cpp
#include <bits/stdc++.h>
#define int long long
signed main() {
std::stack<char> st;
std::string s;
std::cin >> s;
int n = s.length();
s = " " + s;
int flag = 0;
for (int i = 1; i <= n; i++) {
if (s[i] == '(') {
st.push(s[i]);
} else if (s[i] == ')' && st.size() != 0) {
st.pop();
} else if (s[i] == ')' && st.size() == 0) {
flag = 1;
} else if (s[i] == '@') {
break;
} else
continue;
}
//std::cout<<flag;
if (st.empty() && flag == 0) {
std::cout << "YES\n";
} else {
std::cout << "NO\n";
}
return 0;
}
【模板】栈
B3614 【模板】栈 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)
思路:模拟+stl的栈
注意:题目中数据输入比较大,可以用字符串来存需要输入的数
完整代码:
cpp
#include <bits/stdc++.h>
#define int long long
signed main() {
int t;
std::cin >> t;
while (t--) {
int n;
std::cin >> n;
std::stack<std::string> st;
std::string s, x;
for (int i = 1; i <= n; i++) {
std::cin >> s;
if (s == "push") {
std::cin >> x;
st.push(x);
}
if (s == "query") {
if (st.size() == 0) {
std::cout << "Anguei!\n";
} else {
std::cout << st.top() << "\n";
}
}
if (s == "pop") {
if (st.empty()) {
std::cout << "Empty\n";
} else {
st.pop();
}
}
if (s == "size") {
std::cout << st.size() << "\n";
}
}
}
return 0;
}