B3614 【模板】栈题解

张开发
2026/4/10 4:42:19 15 分钟阅读

分享文章

B3614 【模板】栈题解
题目分析这是一道栈的模拟题需要实现一个支持push、pop、query、size四种操作的数据结构。输入第一行数组组数T第二行每组数据的操作次数nn行字符串输出描述输出注意数据范围和。所以x超过了long long的范围最大2^63-1需要用unsigned long long数据读入对效率的影响所以要用scanf和printf我试了cin和cout只能通过部分样例除非用加速但是加速看着有点复杂不想了解建议还是直接用c的输入输出。cin、cout和scanf、printf不能混用这一点我深刻认识到了会输入错乱所以建议用c的就行要注意的点说完了下面直接上ac的代码。#include cstdio #include stack using namespace std;不用过多解释这三行了吧。int main() { int T; scanf(%d, T); // 直接用 scanf不需要加速 while (T--) { int n; scanf(%d, n); stackunsigned long long stk;逐行输入数据组定义一个栈stk存储下面的操作定义为unsigned long long因为x的取值范围。while (n--) { char op[10]; scanf(%s, op); if (op[0] p op[1] u) { unsigned long long x; scanf(%llu, x); // %llu 对应 unsigned long long stk.push(x); } else if (op[0] p op[1] o) { if (stk.empty()) printf(Empty\n); else stk.pop(); } else if (op[0] q) { if (stk.empty()) printf(Anguei!\n); else printf(%llu\n, stk.top()); } else if (op[0] s) { printf(%zu\n, stk.size()); } } } return 0; }逐行输入操作op数组用于存放输入的字符串便于后面判断是栈的哪些操作。%llu对应unsigned long long%zu对应size_t。这题是模板题主要注意输入输出优化。

更多文章