STRPN - Chuyển biểu thức toán học sang RPN
Xem dạng PDF
Gửi bài giải
Điểm:
1,00 (OI)
Giới hạn thời gian:
1.0s
Giới hạn bộ nhớ:
256M
Tác giả:
Dạng bài
Ngôn ngữ cho phép
C, C#, C++, Go, Java, Pascal, Perl, PHP, PyPy, Python, Ruby, Rust, Scratch, Swift
Bạn được cho một danh sách các biểu thức toán học đúng ở dạng trung tố chỉ chứa:
- Biến: là các chữ cái latinh in thường a-z, (mỗi biến là một chữ cái)
- Các toán tử hai ngôi: +, -,*, /, ^ (lũy thừa) với thứ tự ưu tiên như sau: +, - cùng độ ưu tiên thấp nhất; *, / cùng độ ưu tiên thứ hai, ^ có độ ưu tiên cao nhất
- Các cặp dấu ngoặc
Hãy chuyển đổi biểu thức đó sang dạng hậu tố và giữ nguyên thứ tự các số hạng (RPN – ký pháp nghịch đảo Ba Lan)
Input
- Dòng đầu chứa số nguyên dương ~T~ là số biểu thức;
- ~T~ dòng tiếp theo, mỗi dòng chứa một biểu thức dạng trung tố.
Giới hạn:
- ~1 ≤ T ≤ 100~; độ dài các biểu thức trung tố không quá ~400~.
Output
- Ứng với mỗi biểu thức dạng trung tố, in ra biểu thức RPN tương ứng trên một dòng.
Sample
Input #1
3
(a+(b*c))
((a+b)*(z+x))
((a+t)*((b+(a+c))^(c+d)))
Output #1
abc*+
ab+zx+*
at+bac++cd+^*
Problem source: Chuyên Sơn La Online Judge
Bình luận
include <bits/stdc++.h>
using namespace std;
// Hàm kiểm tra nếu c là toán tử bool is_op(char c) { return c=='+' || c=='-' || c=='*' || c=='/' || c=='^'; }
// Hàm ưu tiên toán tử int precedence(char op) { if (op == '+' || op == '-') return 1; if (op == '*' || op == '/') return 2; if (op == '^') return 3; return 0; }
int main() { ios::syncwithstdio(false); cin.tie(nullptr);
}