uva-11234-表达式】的更多相关文章

题目给出一个后缀表达式,让你求从下往上的层次遍历. 思路:结构体建树,然后用数组进行BFS进行层次遍历,最后把数组倒着输出就行了. uva过了,poj老是超时,郁闷. 代码: #include <cstdio> #include <cstring> #include <cstdlib> const int maxn = 10001; char str[maxn]; int p; struct Node { char data; Node* l; Node* r; };…
画图出来后结果很明显 xyPzwIM abcABdefgCDEF sample output wzyxIPM gfCecbDdAaEBF * + - x y z w F B E a A d D b c e C f g #include<cstdio> #include<cstring> #include<iostream> #include<string> #include<algorithm> #include<stack> #in…
找最长的连接的点的数量.用tarjan缩点,思考可知每一个强连通分量里的点要么都选,要么都不选(走别的路),可以动规解决. #include<iostream> #include<cstdio> #include<algorithm> #include<vector> #include<cstring> using namespace std; ; int top,stack[mxn]; bool inst[mxn]; int cnt,dnow;…
题意:给出只包含数字和+*的表达式,你可以自己安排每一个运算的顺序,让你找出表达式可能得到的最大值和最小值. 很明显,先乘后加是最小值,先加后乘能得到最大值. 其实不是很明显... 证明下: 数字的范围是大于等于1的,所以a+b*c如果先考虑加法就变成(a+b)*c,变换下就是ac+bc,而先考虑乘法的话就是a+bc,由于c是大于等于1的,所以ac+bc>=a+bc,先考虑加法结果会不小于先考虑乘法. 根据这个思想,先乘后加是最小值,先加后乘能得到最大值. 代码: /* * Author: il…
题意 输入两个正规表达式,判断两者是否相交(即存在一个串同时满足两个正规表达式).本题的正规表达式包含如下几种情况: 单个小写字符 $c$ 或:($P | Q$). 如果字符串 $s$ 满足 $P$ 或者满足 $Q$,则 $s$ 满足 $(P| Q)$ 连接:($PQ$). 如果字符串 $s_1$ 满足 $P$,$s_2$ 满足 $Q$,则 $s_1s_2$ 满足 $(PQ)$ 克莱因闭包:$(P^*)$. 如果字符串 $s$ 可以写成0个或多个字符串 $s_i$ 的连接 $s_1s_2...$…
由于没有括号,只有+,-,++,--,优先级简单,所以处理起来很简单. 题目要求计算表达式的值以及涉及到的变量的值. 我这题使用stl的string进行实现,随便进行练手,用string的erase删掉全部空格,然后对++.--进行处理然后删去,最后就只剩简单式子了,简单循环下就出来了. 这里有几个坑点: 1.erase函数删除字符后,后面字符的下标都会发生变化,刚开始使用i++去检查空格,结果删除后会跳掉字符. 2.++.--的后缀处理要注意,我开了两个数组放后缀运算的. 3.输出的变量值是当…
紫书354页的题,将表达式树进行公共表达式消除,化为等价的图.因为需要判断某一个是否出现过,所以需要快速比较,采用哈希表的形式,将a~b与1~27一一对应,不采用0,因为0与0000是相同的,对于每一个树,都预先给予其一个编号,然后将其所表示的字符串化为27进制的数,然后递归建造其左右子树,如果发现其是出现过的字符串表达式,则取消其编号,返回编号,即dict[u].建完树之后进行输出.具体细节见代码: #include<cstdio> #include<string> #inclu…
https://vjudge.net/problem/UVA-12219 题意: 用表达式树来表示一个表达式. 思路: 用map来记录出现过的子树.如(b,3,6)表示这棵子树的根为b,左子树为编号为3的子树,右子树为编号为6的子树. #include<iostream> #include<string> #include<cstring> #include<algorithm> #include<map> using namespace std…
题目 题目     分析 写了个平淡无奇的栈处理表达式,在WA了5发后发现,我没处理空串,,,,(或者说鲁棒性差?     代码 #include <bits/stdc++.h> using namespace std; bool equal(char a,char b) { if((a=='(' && b==')') || (a=='[' && b==']')) return true; return false; } int main() { int len…
题意:给出一个后缀表达式f(x),最多出现一次x,解方程f(x) = 0. 读取的时候用一个栈保存之前的结点,可以得到一颗二叉树,标记出现'X'的路径,先把没有出现'X'的子树算完,由于读取建树的时候是由底向上的, 这步可以在读取的时候顺带完成. 注意'X'或'1/x'在某个结点和'0'相乘,那么'X'等效与没有出现过,把之后的结点标记为常数. 然后dfs模拟运算和移项. 还有一些输入输出的小细节和几组测试数据,具体看代码. WA了很多发,去找数据手动对拍好久终于发现(1/(1/x))=0这种情…