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/ 一道非常奇妙的题目. 对于算术表达式一类的问题,能够採用编译原理里的后缀表达式的方式来做.详细做法是分别维护两个栈,一个栈里保存 ...
随机推荐
- Palindrome - POJ 3974 (最长回文子串,Manacher模板)
题意:就是求一个串的最长回文子串....输出长度. 直接上代码吧,没什么好分析的了. 代码如下: ================================================= ...
- Dolls - 4160(简单二分图匹配)
题意:有一些箱子,大箱子可以套小箱子,但是必须h>h,w>w,l>l,求出来最外面能剩下几个箱子无法被嵌套. 分析:思考每个箱子都只会被别的箱子套一次,所以构成一二分匹配模型,只 ...
- appium点击屏幕(手势)
在android测试过程中,会遇到要点击一下屏幕的需求. 在appium旧版本使用下面代码点击android屏幕,没有报错.Map tap = new HashMap(); tap.put(" ...
- 谈NOT IN和Exists
表1: test001 select * from test001
- Moderate 加入空格使得可辨别单词数量最多 @CareerCup
递归题目,注意结合了memo的方法和trie的应用 package Moderate; import java.util.Hashtable; import CtCILibrary.AssortedM ...
- windows7实用快捷键 分类: windows常用小技巧 2014-04-18 14:34 169人阅读 评论(0) 收藏
几个比较实用的快捷键 windows键:简写成win win+ 方向键上下,可以使当前窗体放大或缩小 win+ 方向键左右,可以使当前窗体悬靠在左边或右边 win+Home 仅保留当前窗体 ...
- 为什么使用spring Struts 等框架开发
转载自:http://www.cnblogs.com/sharpxiajun/p/3936268.html 今年我一直在思考web开发里的前后端分离的问题,到了现在也颇有点心得了,随着这个问题的深入, ...
- Linux开发工具之gdb(上)
三.gdb调试(上) 01.gdb:gdb是GNU debugger的缩写,是编程调试工作. 功能: 启动程序,可以按照用户自定义的要求随心所欲的运行程序: 可让被调试的程序在用户所指定的调试 ...
- Codeforces 526D - Om Nom and Necklace 【KMP】
ZeptoLab Code Rush 2015 D. Om Nom and Necklace [题意] 给出一个字符串s,判断其各个前缀是否是 ABABA…ABA的形式(A和B都可以为空,且A有Q+1 ...
- surfaceView和Camera配合进行摄像头的预览
首先是Camera类,在5.0上已经被废弃,不推荐使用但还是支持的.最新的是Camera2类,我还没有研究,据说用法完全不一样,反正也是一个坑跳入另外一个坑. 上面是简介和需要的权限,记得加上权限. ...