当前位置: 首页 > news >正文

P1175 后缀表达式

题意

传送门 P1175 表达式的转换

题解

编码运算符的优先级,线性复杂度将中缀表达式转换为后缀表达式。为了方便输出,可以用类似对顶栈的结构,初始时右侧栈为后缀表达式;对于每一步计算,右侧栈不断弹出数字到左侧栈,直到扫描到第一个运算符。总时间复杂度 O ( n ) O(n) O(n)

#include <bits/stdc++.h>
using namespace std;int main() {ios::sync_with_stdio(false);cin.tie(nullptr);vector<string> left, right;string s;cin >> s;map<char, int> rnk{{'(', -1}, {'+', 0}, {'-', 0}, {'*', 1}, {'/', 1}, {'^', 2}};vector<char> ops;for (auto c : s) {if (c == '(') {ops.push_back(c);} else if (c == ')') {for (;;) {auto cc = ops.back();ops.pop_back();if (cc == '(') {break;}left.push_back(string(1, cc));}} else if (isdigit(c)) {left.push_back(string(1, c));} else {while (!ops.empty() && (rnk[ops.back()] > rnk[c] || (rnk[ops.back()] == rnk[c] && c != '^'))) {left.push_back(string(1, ops.back()));ops.pop_back();}ops.push_back(c);}}while (!ops.empty()) {left.push_back(string(1, ops.back()));ops.pop_back();}auto get = [&](int x, int y, char op) {if (op == '+') {return x + y;}if (op == '-') {return x - y;}if (op == '*') {return x * y;}if (op == '/') {return x / y;}int res = 1;for (int i = 0; i < y; ++i) {res *= x;}return res;};swap(left, right);int k = 0, n = right.size();for (;;) {while (k < n && isdigit(right[k][0])) {left.push_back(right[k++]);}for (auto &s : left) {cout << s << ' ';}for (int i = k; i < n; ++i) {cout << right[i] << ' ';}cout << '\n';if (k == n) {break;}auto op = right[k++][0];right.pop_back();int y = stoi(left.back());left.pop_back();int x = stoi(left.back());left.pop_back();int z = get(x, y, op);left.push_back(to_string(z));}return 0;
}
http://www.lryc.cn/news/99671.html

相关文章:

  • 【HashMap】49. 字母异位词分组
  • golang实现多态
  • formatter的用法,深拷贝, Object.assign 方法实战。
  • Windows上安装和使用git到gitoschina和github上_亲测
  • MATLAB算法实战应用案例精讲-【深度学习】预训练模型GPTXLNet
  • Spring data JPA常用命令
  • Excel的使用
  • 大数据课程D4——hadoop的MapReduce
  • java策略模式
  • Vue2封装自定义全局Loading组件
  • docker 搭建jenkins
  • 【Docker】Docker 部署 Mysql 并设置数据持久化
  • 【ARM 常见汇编指令学习 5 -- arm64汇编指令 wzr 和 xzr】
  • 4.4 成员变量与局部变量的区别有哪些?
  • 学生管理系统-03项目案例(3)
  • Banana Pi BPI-KVM – 基于 Rockchip RK3568 SoC 的 KVM over IP 解决方案
  • 面试:Spring Cloud和Kubernetes的优缺点
  • TSINGSEE青犀视频安防监控视频平台EasyCVR新增密码复杂度提示
  • 前端开发中的正则表达式:解密规则的魔法
  • const的用法
  • 机器学习深度学习——模型选择、欠拟合和过拟合
  • IP 服务级别协议监控
  • Emvirus: 基于 embedding 的神经网络来预测 human-virus PPIs【Biosafety and Health,2023】
  • 安全文件传输:如何降低数据丢失的风险
  • AI绘画StableDiffusion实操教程:可爱头像奶茶小女孩(附高清图片)
  • java8 GroupingBy 用法大全
  • vue_router__WEBPACK_IMPORTED_MODULE_1__.default is not a constructor
  • 前端html2canvas和dom-to-image实现截图功能
  • Hadoop平台集群之间Hive表和分区的导出和导入迁移(脚本)
  • Linux C语言实践eBPF