codevs 1107 等价表达式
题解:第一眼这题好像非常难得样子,简直没有思路。但是这可以用栈带入特殊值来解决。这里用到两个栈,一个是存贮数字,另一个存贮运算符,按优先级进行运算。当读入的运算符比运算符栈的栈顶元素优先级低时,弹出栈顶元素,然后继续判断,直到小于栈顶元素,然后将这个运算符压入栈中。若读到右括号时,则将括号里的所有运算符依次弹出进行运算,直到读到左括号。然后最后只需判断两个表达式的结果是否相同,注意多带入几个特殊值,防止出现偶然性结果。
#include<cstdio>
#include<iostream>
#include<cstring>
using namespace std;
string str1,str2;
int n,k,m=;
long long num[],ys[];//num[]数字栈,ys[]运算符栈
long long power(long long a,long long b)//由于cmath里的power(x,y)x、y为实型,所以自定义一个,计算a的b次方
{
long long ans=;
for (int i=;i<=b;i++)
ans=ans*a;
return ans;
}
void js(int p,int q)
{
if (q==) num[p-]=num[p-]+num[p];
if (q==) num[p-]=num[p-]-num[p];
if (q==) num[p-]=num[p-]*num[p];
if (q==) num[p-]=power(num[p-],num[p]);
}
long long xx(string str)
{
int sn,len=str.length(),p=-,q=-;
long long nn=;
for (int i=;i<len;i++)
{
if (str[i]=='a') num[++p]=k;//将a带入特殊值
else if (str[i]>=''&&str[i]<='')
nn=nn*+(str[i]-'');
else if (str[i]!=' ')
{
if (nn!=)
{
num[++p]=nn;
nn=;
}
if (str[i]=='+') sn=;//枚举运算符,并各用一数字表示
if (str[i]=='-') sn=;
if (str[i]=='*') sn=;
if (str[i]=='^') sn=;
if (str[i]=='(') sn=;
if (str[i]==')') sn=;
if (sn==) ys[++q]=sn;//读入到左括号
else if (sn==)//读入右括号,将括号内先进行运算。
while (q>=&&ys[q--]!=) js(p--,ys[q+]);
else
{
while (q>=&&ys[q]<=&&ys[q]>=sn) js(p--,ys[q--]);
ys[++q]=sn;
}
}
}
if (nn!=)//清空栈
{
num[++p]=nn;
nn=;
}
while (q>=) js(p--,ys[q--]);
return num[];
}
int main()
{
getline(cin,str1);
cin>>n;
getline(cin,str2); //避免换行符的影响,这个读入的是空字符串
while (n--)
{
bool f=true;
getline(cin,str2);
for (int i=;i<=;i++)//枚举几个例子,将其带入a,计算两个表达式结果是否相同
{
k=i;
if (xx(str1)!=xx(str2)) //判断两个表达式结果是否相同
{
f=false;
break;
}
} if (f) cout<<(char)('A'+m);
m++;
}
cout<<endl;
return ;
}
参考黄学长博客
codevs 1107 等价表达式的更多相关文章
- 数据结构--栈 codevs 1107 等价表达式
codevs 1107 等价表达式 2005年NOIP全国联赛提高组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题目描述 Descripti ...
- 等价表达式(noip2005)
3.等价表达式 [问题描述] 兵兵班的同学都喜欢数学这一科目,中秋聚会这天,数学课代表给大家出了个有关代数表达式的选择题.这个题目的题干中首先给出了一个代数表达式,然后列出了若干选项,每个选项也 ...
- 洛谷 P1054 等价表达式 解题报告
P1054 等价表达式 题目描述 明明进了中学之后,学到了代数表达式.有一天,他碰到一个很麻烦的选择题.这个题目的题干中首先给出了一个代数表达式,然后列出了若干选项,每个选项也是一个代数表达式,题目的 ...
- 洛谷P1054 等价表达式
P1054 等价表达式 题目描述 明明进了中学之后,学到了代数表达式.有一天,他碰到一个很麻烦的选择题.这个题目的题干中首先给出了一个代数表达式,然后列出了若干选项,每个选项也是一个代数表达式,题目的 ...
- 等价表达式 2005年NOIP全国联赛提高组(栈模拟)
P1054 等价表达式 题目描述 明明进了中学之后,学到了代数表达式.有一天,他碰到一个很麻烦的选择题.这个题目的题干中首先给出了一个代数表达式,然后列出了若干选项,每个选项也是一个代数表达式,题目的 ...
- 洛谷 P1054 等价表达式
洛谷 P1054 等价表达式 题目描述 明明进了中学之后,学到了代数表达式.有一天,他碰到一个很麻烦的选择题.这个题目的题干中首先给出了一个代数表达式,然后列出了若干选项,每个选项也是一个代数表达式, ...
- 等价表达式 (codevs 1107)题解
[问题描述] 明明进了中学之后,学到了代数表达式.有一天,他碰到一个很麻烦的选择题.这个题目的题干中首先给出了一个代数表达式,然后列出了若干选项,每个选项也是一个代数表达式,题目的要求是判断选项中哪些 ...
- 等价表达式(codevs 1107 答案错误)
题目描述 Description 明明进了中学之后,学到了代数表达式.有一天,他碰到一个很麻烦的选择题.这个题目的题干中首先给出了一个代数表达式,然后列出了若干选项,每个选项也是一个代数表达式,题目的 ...
- [Codevs 1107][NOIP 1107]等效表达
主题连接:http://codevs.cn/problem/1107/ 一道非常奇妙的题目. 对于算术表达式一类的问题,能够採用编译原理里的后缀表达式的方式来做.详细做法是分别维护两个栈,一个栈里保存 ...
随机推荐
- Servlet的接口实现类
Sun公司提供了两个默认实现类 GenericServlet和HttpServlet HttpServlet指能够处理Http请求的Servlet,它在原有的Servlet基础上添加了与HTTp相关的 ...
- easyUI属性总结
1.div easyui-window 生成一个window窗口样式. 属性如下: 1)modal:是否生成模态窗口.true[是] fal ...
- TCP/UDP 、HTTP、IP 、socket 的关系。
网络有上下分为7 层.物理层,数据链路层.网络层.会话层.应用层.传输层: IP协议位于网络层,IP和端口来控制网络流向: TCP.UDP是基于传输层.TCP保证三次握手.传递数据: UDP为不考虑是 ...
- MVC 无法将类型“System.Collections.Generic.List<AnonymousType#1>”隐式转换为“System.Collections.Generic.IList<Mvc3Modeltest.Models.Movie>”。存在一个显式转换(是否缺少强制转换?))
1.问题: 2.解决方案:强制指定类型. 解决之.
- HDU 4287 Intelligent IME
Intelligent IME Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) ...
- ScriptManager的使用方法
脚本管理控件(ScriptManger)是ASP.NET AJAX中很重要的控件,通过使用ScriptManger可以进行整个页面的局部更新的管理.ScriptManger用来处理页面上局部更新,同一 ...
- 从零开始写一个Tomcat(叁)--请求解析
挖坑挖了这么长时间也该继续填坑了,上文书讲到从零开始写一个Tomcat(贰)--建立动态服务器,讲了如何让服务器解析请求,分离servlet请求和静态资源请求,读取静态资源文件输出或是通过URLCla ...
- Swift: Initialization-2
Failable Initializers 有的时候,可能是参数问题.需要的外部资源没有到位等原因,初始化可能失败.为了应对这种情况,我们可以定义一个或多个可失败的构造方法. init? A fail ...
- Java基础知识强化之集合框架笔记11:Collection集合之迭代器的原理及源码解析
1. 迭代器为什么不定义成一个类,而是定义为一个接口 ? 答:假设迭代器定义的是一个类,这样我们就可以创建该类的对象,调用该类的方法来实现集合的遍历.但是呢? 我们想想,Java中提供了很多的集合类 ...
- C++ | 调试 · 从汇编代码看i++和++i的区别
以int类型为例 C++编译器为++i生成的代码是 013E1375 mov eax,dword ptr [i] 013E1378 add eax, 013E137B mov dword ptr [i ...