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

P1175 学习笔记

省流:毒瘤字符串

题目传送门

没事中间加个转中缀干嘛?害的我当年调了一上午。

这个就是栈的经典板子后缀表达式的一个加强版,需要先中缀转后缀再求答案。

灵活变通,压两个栈不就行了。

中缀转后缀:

string zhongzhui(string s){mp['+'] = 1;mp['-'] = 2;mp['*'] = 3;mp['/'] = 4;mp['('] = 5;mp[')'] = 6;mp['^'] = 7;for (int i = 1; i <= 9; i++)for (int j = 1; j <= 9; j++)b[i][j] = 0;b[5][5] = 1; b[7][7] = 1; b[1][3] = 1; b[1][4] = 1; b[1][5] = 1; b[1][7] = 1; b[2][3] = 1; b[2][4] = 1; b[2][5] = 1;b[2][7] = 1; b[3][5] = 1; b[3][7] = 1; b[4][5] = 1; b[4][7] = 1; b[5][1] = 1; b[5][2] = 1; b[5][3] = 1; b[5][4] = 1;b[5][6] = 1; b[5][7] = 1; b[6][1] = 1; b[6][2] = 1; b[6][3] = 1; b[6][4] = 1; b[6][5] = 1; b[6][7] = 1; b[7][5] = 1; // 小小打表string ans;char a[35] = "";int num = 0, sum = 0;for (int i = 0; i < s.size(); i++)if (s[i] >= '0' && s[i] <= '9')num = num * 10 + s[i] - 48;else {if (num > 0){string str = "";while (num > 0)str = char(num % 10 + '0') + str, num /= 10;ans = ans + str + ' ';}if (s[i] == ')') // 关于括号的处理while(1){if (sum <= 0)break;if (a[sum] == '('){sum--;break;}ans = ans + a[sum] + ' ';sum--;}else{while(sum > 0 && b[mp[a[sum]]][mp[s[i]]] == 0)ans = ans + a[sum] + ' ', sum--;a[++sum] = s[i];}}if (num > 0){string str = "";while (num > 0)str = char(num % 10 + '0') + str, num /= 10;ans = ans + str + ' ';}while (1){ans = ans + a[sum] + ' ';sum--;if (sum <= 0)break;}return ans;
}

后缀求答案:

void getans(string s){ // 橙cout << s << endl;int x = 0, sum = 0, a[100005] = {0};for (int i = 0; i < s.size(); i++){if (s[i] >= '0' && s[i] <= '9')x = x * 10 + s[i] - 48;else if (s[i] == ' ' && x > 0)a[++sum] = x, x = 0;else{if (s[i] == ' ')continue;if (s[i] == '+')a[sum - 1] += a[sum], sum--;else if (s[i] == '-')a[sum - 1] -= a[sum], sum--;else if (s[i] == '*')a[sum - 1] *= a[sum], sum--;else if (s[i] == '/')a[sum - 1] /= a[sum], sum--;else if (s[i] == '^')a[sum - 1] = pow(a[sum - 1], a[sum]), sum--;for (int i = 1; i < sum; i++)cout << a[i] << ' ';cout << a[sum];cout << s.substr(i + 1) << endl;;}}
} 

所以橙+黄=绿。

code
#include<bits/stdc++.h>
using namespace std;string s;
map <char, int> mp;
int b[10][10];void getans(string s){cout << s << endl;int x = 0, sum = 0, a[100005] = {0};for (int i = 0; i < s.size(); i++){if (s[i] >= '0' && s[i] <= '9')x = x * 10 + s[i] - 48;else if (s[i] == ' ' && x > 0)a[++sum] = x, x = 0;else{if (s[i] == ' ')continue;if (s[i] == '+')a[sum - 1] += a[sum], sum--;else if (s[i] == '-')a[sum - 1] -= a[sum], sum--;else if (s[i] == '*')a[sum - 1] *= a[sum], sum--;else if (s[i] == '/')a[sum - 1] /= a[sum], sum--;else if (s[i] == '^')a[sum - 1] = pow(a[sum - 1], a[sum]), sum--;for (int i = 1; i < sum; i++)cout << a[i] << ' ';cout << a[sum];cout << s.substr(i + 1) << endl;;}}
} string zhongzhui(string s){mp['+'] = 1;mp['-'] = 2;mp['*'] = 3;mp['/'] = 4;mp['('] = 5;mp[')'] = 6;mp['^'] = 7;for (int i = 1; i <= 9; i++)for (int j = 1; j <= 9; j++)b[i][j] = 0;b[5][5] = 1; b[7][7] = 1; b[1][3] = 1; b[1][4] = 1; b[1][5] = 1; b[1][7] = 1; b[2][3] = 1; b[2][4] = 1; b[2][5] = 1;b[2][7] = 1; b[3][5] = 1; b[3][7] = 1; b[4][5] = 1; b[4][7] = 1; b[5][1] = 1; b[5][2] = 1; b[5][3] = 1; b[5][4] = 1;b[5][6] = 1; b[5][7] = 1; b[6][1] = 1; b[6][2] = 1; b[6][3] = 1; b[6][4] = 1; b[6][5] = 1; b[6][7] = 1; b[7][5] = 1;string ans;char a[35] = "";int num = 0, sum = 0;for (int i = 0; i < s.size(); i++)if (s[i] >= '0' && s[i] <= '9')num = num * 10 + s[i] - 48;else {if (num > 0){string str = "";while (num > 0)str = char(num % 10 + '0') + str, num /= 10;ans = ans + str + ' ';}if (s[i] == ')')while(1){if (sum <= 0)break;if (a[sum] == '('){sum--;break;}ans = ans + a[sum] + ' ';sum--;}else{while(sum > 0 && b[mp[a[sum]]][mp[s[i]]] == 0)ans = ans + a[sum] + ' ', sum--;a[++sum] = s[i];}}if (num > 0){string str = "";while (num > 0)str = char(num % 10 + '0') + str, num /= 10;ans = ans + str + ' ';}while (1){ans = ans + a[sum] + ' ';sum--;if (sum <= 0)break;}return ans;
}int main() {cin >> s;getans(zhongzhui(s));return 0;
}
http://www.jsqmd.com/news/375711/

相关文章:

  • python __getitem__() __setitem__() 方法
  • 计算机Java毕设实战-基于SpringBoot的研学旅游服务基于springboot的小学生研学活动管理系统【完整源码+LW+部署说明+演示视频,全bao一条龙等】
  • 计算机Java毕设实战-基于springboot+vue的陶瓷售卖系统基于springboot的陶瓷售卖系统【完整源码+LW+部署说明+演示视频,全bao一条龙等】
  • Yak学习1:环境搭建和基础语法1
  • 【课程设计/毕业设计】基于springboot的小学生研学活动管理系统基于Java springboot小学生研学管理系统考勤签到活动报名【附源码、数据库、万字文档】
  • 【课程设计/毕业设计】基于springboot的陶瓷售卖系统陶瓷购物网站【附源码、数据库、万字文档】
  • Java毕设项目:基于springboot的小学生研学活动管理系统(源码+文档,讲解、调试运行,定制等)
  • Vue day14
  • P1063 学习笔记
  • 【每日一题】LeetCode 3713. 最长的平衡子串 I
  • Java计算机毕设之基于springboot的小学生研学活动,游学活动管理系统基于springboot的小学生研学活动管理系统(完整前后端代码+说明文档+LW,调试定制等)
  • Java计算机毕设之基于Spring Boot的陶瓷文化网站的设计与实现基于springboot的陶瓷售卖系统(完整前后端代码+说明文档+LW,调试定制等)
  • 【毕业设计】基于springboot的小学生研学活动管理系统(源码+文档+远程调试,全bao定制等)
  • Java毕设项目推荐-基于springboot瓷器商城管理系统基于springboot的陶瓷售卖系统【附源码+文档,调试定制服务】
  • 读书笔记一:从“写代码”到“做工程”——个人能力与流程重塑
  • Java毕设项目推荐-基于Java springboot小学生研学管理系统考勤签到活动报名基于springboot的小学生研学活动管理系统【附源码+文档,调试定制服务】
  • 读书笔记二:团队协作——软件工程的核心命题
  • Java毕设选题推荐:基于springboot的小学生研学活动管理系统【附源码、mysql、文档、调试+代码讲解+全bao等】
  • 2026 年国产时序数据库技术深度解析:多模态融合架构与工程实践完整教程:从入门到实战部署
  • 2026Q1烟台财税公司县域征纳协同排行榜|深耕县域,适配税务便民服务,合规高效 - 品牌智鉴榜
  • Java毕设选题推荐:基于springboot的陶瓷售卖系统springboot瓷器商城管理系统【附源码、mysql、文档、调试+代码讲解+全bao等】
  • 基于微信小程序的智能垃圾分类助手系统
  • 读书笔记三:工程思维与职业素养——软件工程的底层逻辑
  • 基于SpringBoot和Vue的智慧城市管理中心平台
  • P1018 学习笔记
  • python super()方法和__class__变量
  • 基于SpringBoot和Vue的智慧医疗管理系统
  • 基于SpringBoot和Vue的政府集中采购管理系统设计与实现
  • Lab4-Lab: traps MIT6.1810操作系统工程【持续更新】 _
  • AI博主私藏|4款PPT工具实测,新手也能1小时出片(附避坑指南) - 品牌测评鉴赏家