传送门

题解:第一眼这题好像非常难得样子,简直没有思路。但是这可以用栈带入特殊值来解决。这里用到两个栈,一个是存贮数字,另一个存贮运算符,按优先级进行运算。当读入的运算符比运算符栈的栈顶元素优先级低时,弹出栈顶元素,然后继续判断,直到小于栈顶元素,然后将这个运算符压入栈中。若读到右括号时,则将括号里的所有运算符依次弹出进行运算,直到读到左括号。然后最后只需判断两个表达式的结果是否相同,注意多带入几个特殊值,防止出现偶然性结果。

#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 等价表达式的更多相关文章

  1. 数据结构--栈 codevs 1107 等价表达式

    codevs 1107 等价表达式 2005年NOIP全国联赛提高组  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 钻石 Diamond     题目描述 Descripti ...

  2. 等价表达式(noip2005)

    3.等价表达式 [问题描述]    兵兵班的同学都喜欢数学这一科目,中秋聚会这天,数学课代表给大家出了个有关代数表达式的选择题.这个题目的题干中首先给出了一个代数表达式,然后列出了若干选项,每个选项也 ...

  3. 洛谷 P1054 等价表达式 解题报告

    P1054 等价表达式 题目描述 明明进了中学之后,学到了代数表达式.有一天,他碰到一个很麻烦的选择题.这个题目的题干中首先给出了一个代数表达式,然后列出了若干选项,每个选项也是一个代数表达式,题目的 ...

  4. 洛谷P1054 等价表达式

    P1054 等价表达式 题目描述 明明进了中学之后,学到了代数表达式.有一天,他碰到一个很麻烦的选择题.这个题目的题干中首先给出了一个代数表达式,然后列出了若干选项,每个选项也是一个代数表达式,题目的 ...

  5. 等价表达式 2005年NOIP全国联赛提高组(栈模拟)

    P1054 等价表达式 题目描述 明明进了中学之后,学到了代数表达式.有一天,他碰到一个很麻烦的选择题.这个题目的题干中首先给出了一个代数表达式,然后列出了若干选项,每个选项也是一个代数表达式,题目的 ...

  6. 洛谷 P1054 等价表达式

    洛谷 P1054 等价表达式 题目描述 明明进了中学之后,学到了代数表达式.有一天,他碰到一个很麻烦的选择题.这个题目的题干中首先给出了一个代数表达式,然后列出了若干选项,每个选项也是一个代数表达式, ...

  7. 等价表达式 (codevs 1107)题解

    [问题描述] 明明进了中学之后,学到了代数表达式.有一天,他碰到一个很麻烦的选择题.这个题目的题干中首先给出了一个代数表达式,然后列出了若干选项,每个选项也是一个代数表达式,题目的要求是判断选项中哪些 ...

  8. 等价表达式(codevs 1107 答案错误)

    题目描述 Description 明明进了中学之后,学到了代数表达式.有一天,他碰到一个很麻烦的选择题.这个题目的题干中首先给出了一个代数表达式,然后列出了若干选项,每个选项也是一个代数表达式,题目的 ...

  9. [Codevs 1107][NOIP 1107]等效表达

    主题连接:http://codevs.cn/problem/1107/ 一道非常奇妙的题目. 对于算术表达式一类的问题,能够採用编译原理里的后缀表达式的方式来做.详细做法是分别维护两个栈,一个栈里保存 ...

随机推荐

  1. centos 安装node js环境

    node.js支持多种平台安装,其中Win平台安装比较简单,下面重点讲解下Linux平台的安装步骤.本文以CentOS平台为实例,不准备讲 解采取源码编译安装方式,而是采取在node.js网站下载已经 ...

  2. 【索引】Volume 0. Getting Started

    AOAPC I: Beginning Algorithm Contests (Rujia Liu) Volume 0. Getting Started 10055 - Hashmat the Brav ...

  3. FC和SCSI

    IDE(Integrated Drive Electronics)即"电子集成驱动器",它的本意是指把"硬盘控制器"与"盘体"集成在一起的硬 ...

  4. jquery常用见的正则表达式

    quickexpr = /^(?:[^<]*(<[ww]+>)[^>]*$|#([w-]+)$)/  (?:…)表示是一个非捕获型 [^<]表示是以"<& ...

  5. android使用bintray发布aar到jcenter

    前言 这两天心血来潮突然想把自己的android library的aar放到jcenter里面,这样一来自己便可以在任何时间任何地点通过internet得到自己的library的引用了,况且现在and ...

  6. adb出现adb server is out of date时的解决的方法

    出错的原因是adb的port被其它程序的进程占据了,所以要做的就是找到并kill该进程.步骤:. 1.在cmd中运行adb nodaemon server,查看adb的port号是多少,普通情况下是5 ...

  7. Linux在山Windows共享文件夹

    $ sudo mount.cifs //windows-ip/shared  /media/ -o user=username password=password 该命令挂载Windows在下面sha ...

  8. Codeforces 190E - Counter Attack

    [题意]给一个无向图的反图(即给定的边实际上不存在,而未给的边是存在的),求连通块数.(点数n<=5*10^5,边数m<=10^6) 一开始我想的用DFS,枚举每一个点,跳过不存在的点,直 ...

  9. (转)C#文件操作

    原文连接:http://www.cnblogs.com/wangshenhe/archive/2012/05/09/2490438.html 文件与文件夹操作主要用到以下几个类: 1.File类: 提 ...

  10. 微信小应用vs progressive-web-apps

    https://developers.google.com/web/progressive-web-apps/