天梯赛补题
算式拆解
链接:L2-053 算式拆解 - 团体程序设计天梯赛-练习集
分析:
本题的意思是给出一个带括号的运算式,需要根据括号以及运算符本身 按照运算顺序输出各个子运算式(不带括号)。本题可参考洛谷上的一道后缀表达式,用栈进行实现。对字符串进行遍历,如果遇到左括号那么说明后边就是一个表达式,将后边的内容给连起来。当遇到右括号的时候说明此表达式已经结束,并且此时就是优先级最高的表达式,将栈中最近的一个表达式输出即可。
代码:
#include <iostream>
#include <string>
#include <stack>
using namespace std;
int main()
{stack<char> t;string s,a;cin >> s;for(auto i:s){if(i!=')') t.push(i);//(((2+3)*4)-(5/(6*7)))else//此时为‘)’的时候 {while(t.top()!='('){a=t.top()+a;t.pop(); }cout << a << endl;t.pop(); a.clear();}}return 0;
}
这不是字符串题
题目链接:L1-110 这不是字符串题 - 团体程序设计天梯赛-练习集
分析:
这是一道超级大模拟,尤其是操作一,实现起来极其繁琐,非常考验基本功以及对vector函数的使用熟练度。没什么好说的,直接看代码吧
代码:
#include <iostream>
#include <vector>
#include <algorithm>using namespace std;int main()
{int n, m;cin >> n >> m;vector<int> v(n);for (int i = 0; i < n; i++)cin >> v[i];for (int i = 0; i < m; i++) {int op;cin >> op;if (op == 1) {int l1, l2;cin >> l1;vector<int> a(l1);for (int j = 0; j < l1; j++)cin >> a[j];cin >> l2;vector<int> b(l2);for (int j = 0; j < l2; j++)cin >> b[j];for (int k = 0; k <=v.size() - l1; k++) {int flag = 1;for (int j = 0; j < l1; j++) {if (v[k + j] != a[j]) {flag = 0;break;}}if(flag){v.erase(v.begin() + k, v.begin() + k + l1);v.insert(v.begin() + k, b.begin(), b.end());break;}}} else if (op == 2) {int size = v.size();for (int k = 0; k < size - 1; k++) {if ((v[k] + v[k + 1]) % 2 == 0) {v.insert(v.begin() + k + 1, (v[k] + v[k + 1]) / 2);k++;size++;}}} else if (op == 3) {int l, r;cin >> l >> r;reverse(v.begin() + l - 1, v.begin() + r);}}for (int i = 0; i < v.size(); i++){if (i != v.size() - 1) cout << v[i] << " ";else cout << v[i] << endl;}return 0;
}