题目大意

给一个含字母a的表达式,求n个选项中表达式跟一开始那个等价的有哪些

做法

模拟一个多项式显然难以实现
那么我们高兴的找一些素数代入表达式,再随便找一个素数做模
表达式求值优先级表

( ) + - * ^
( < = < < < <
)
+ < > > > < <
- < > > > < <
* < > > > > <
^ < > > > > >

如果前一符号优先级大于有一符号我们就进行前一个符号的运算
```
#include
#include
#include
#include
typedef long long LL;
const int Q=10000007;
const int A=33;
LL p[A]={0,2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,91,97,131,2930,3033,32767,131071};
int chg[256];
char cmp[7][7]={//前一符号与后一符号比较
{},
{' ','','>','>','','>','>','','>','>','>','','>','>','>','>'}
};
char t[53],s[53];
int m;
LL ans[A];
LL tmp[A];
int opr[53],stopr;
LL num[A][53];int stnum;

void print(int x)

{

for(int i=1;i<A;i++) if(tmp[i]!=ans[i]) return;

printf("%c",'A'+x);

}

LL yusuan(LL a,LL b,int x)

{

if(x3) return (a+b)%Q;

if(x4) return ((a-b)%Q+Q)%Q;

if(x5) return (a*b)%Q;

if(x6)

{

LL res=1;

while(b--) res=(res*a)%Q;

return res;

}

}

void calc(LL to)

{

int n=0,len=strlen(t),i,j,x;LL d;

for(i=0;i<len;i++) if(t[i]!=' ') s[++n]=t[i];

stopr=0;stnum=0;

s[0]='(';s[++n]=')';

for(i=0;i<=n;i++)

{

if(chg[s[i]])

{

x=chg[s[i]];

while(stopr&&cmp[opr[stopr]][x]'>')

{

stnum--;

for(j=1;j<A;j++) num[j][stnum]=yusuan(num[j][stnum],num[j][stnum+1],opr[stopr]);

stopr--;

}

if(stopr&&cmp[opr[stopr]][x]'=') stopr--;

else opr[++stopr]=x;

}

else

{

if(s[i]=='a')

{

++stnum;

for(j=1;j<A;j++) num[j][stnum]=p[j];

}

else

{

d=0;

for(;isdigit(s[i]);i++) d=(d
10+s[i]-'0')%Q;

i--;

++stnum;

for(j=1;j<A;j++) num[j][stnum]=d;

}

}

}

for(i=1;i<A;i++) to[i]=num[i][1];

}

int main()

{

chg['(']=1;chg[')']=2;

chg['+']=3;chg['-']=4;

chg['*']=5;chg['^']=6;

int i;

gets(t);

calc(ans);

scanf("%d",&m);getchar();

for(i=0;i<m;i++)

{

gets(t);

calc(tmp);

print(i);

}

return 0;

}

表达式求值(noip2015等价表达式)的更多相关文章

  1. leetcode算法学习----逆波兰表达式求值(后缀表达式)

    下面题目是LeetCode算法:逆波兰表达式求值(java实现) 逆波兰表达式即后缀表达式. 题目:  有效的运算符包括 +, -, *, / .每个运算对象可以是整数,也可以是另一个逆波兰表达式.同 ...

  2. C++之字符串表达式求值

    关于字符串表达式求值,应该是程序猿们机试或者面试时候常见问题之一,昨天参加国内某IT的机试,压轴便为此题,今天抽空对其进行了研究. 算术表达式中最常见的表示法形式有 中缀.前缀和 后缀表示法.中缀表示 ...

  3. 蓝桥杯算法训练 java算法 表达式求值

    问题描述 输入一个只包含加减乖除和括号的合法表达式,求表达式的值.其中除表示整除. 输入格式 输入一行,包含一个表达式. 输出格式 输出这个表达式的值. 样例输入 1-2+3*(4-5) 样例输出 - ...

  4. 【ACM】nyoj_305_表达式求值_201308081018

    表达式求值时间限制:3000 ms  |  内存限制:65535 KB 难度:3描述 Dr.Kong设计的机器人卡多掌握了加减法运算以后,最近又学会了一些简单的函数求值,比如,它知道函数min(20, ...

  5. NC16539 [NOIP2013]表达式求值

    NC16539 [NOIP2013]表达式求值 题目 题目描述 给定一个只包含加法和乘法的算术表达式,请你编程计算表达式的值. 输入描述 输入仅有一行,为需要你计算的表达式,表达式中只包含数字.加法运 ...

  6. 用Python3实现表达式求值

    一.题目描述 请用 python3 编写一个计算器的控制台程序,支持加减乘除.乘方.括号.小数点,运算符优先级为括号>乘方>乘除>加减,同级别运算按照从左向右的顺序计算. 二.输入描 ...

  7. 数据结构算法C语言实现(八)--- 3.2栈的应用举例:迷宫求解与表达式求值

    一.简介 迷宫求解:类似图的DFS.具体的算法思路可以参考书上的50.51页,不过书上只说了粗略的算法,实现起来还是有很多细节需要注意.大多数只是给了个抽象的名字,甚至参数类型,返回值也没说的很清楚, ...

  8. nyoj305_表达式求值

    表达式求值 时间限制:3000 ms  |  内存限制:65535 KB 难度:3   描述 Dr.Kong设计的机器人卡多掌握了加减法运算以后,最近又学会了一些简单的函数求值,比如,它知道函数min ...

  9. 利用栈实现算术表达式求值(Java语言描述)

    利用栈实现算术表达式求值(Java语言描述) 算术表达式求值是栈的典型应用,自己写栈,实现Java栈算术表达式求值,涉及栈,编译原理方面的知识.声明:部分代码参考自茫茫大海的专栏. 链栈的实现: pa ...

随机推荐

  1. MATLAB的三维散点图

    MATLAB中三维散点图函数为scatter3(x,y,z) 三维火柴图为stem3(x,y,z)

  2. linux下从SVN checkout目录源码下来

    需求:我们替换http请求为https协议,要查看全不全,得到源码中去检查,所以自动化扫源码查询.但是得先有源码包啊.源码包直接从SVN上checkout 1.下载 [root@v50 0.02 sr ...

  3. python 常用内建模块(3) base64

    Base64是一种用64个字符来表示任意二进制数据的方法. 用记事本打开exe.jpg.pdf这些文件时,我们都会看到一大堆乱码,因为二进制文件包含很多无法显示和打印的字符,所以,如果要让记事本这样的 ...

  4. MQTT开发笔记之《安全传输-自问自答》

    Mosquito使用SSL/TLS进行安全通信时的使用方法:http://www.it165.net/pro/html/201404/12615.htmljava版mosquitto客户端使用SSL功 ...

  5. Python连接MySQL

    win10.Python2.7.Pycharm import MySQLdb conn = MySQLdb.Connect( host = '127.0.0.1', port = 3306, user ...

  6. ORA-01722:无效数字

    今天写查询语句,关联多张表,出现了这个错误. 结果发现时字段的数据类型不一致. select * from table_a a,table_b b where to_char(a.project_id ...

  7. 推荐几款我一直在用的chrome插件(上)

    我用的chrome插件挺多的,所谓工欲善其事必先利其器,我热衷于搜寻好用的工具来让我平时的工作事半功倍.下面介绍几款我正在用的感觉还不错的插件,如果大家还有其它好用的(肯定有,chrome插件库太庞大 ...

  8. 关于firefox对font awesome本地环境无法加载问题

    问题描述 昨天尝试使用font awesome加载字体图标,直接在本地引入相关文件,测试发现图标在chrome和IE环境支持,但是在firefox上怎么都显示不出来. 解决方法 通过测试发现通过htt ...

  9. Linux文件类型

    1.windows系统和Linux系统的区别 windows通过问价扩展名来区分文件类型,例如*.txt是一个文本文件, linux系统文件的扩展名和文件类型没有关系 为了容易区分文件类型,linux ...

  10. axios基本用法

    vue更新到2.0之后,作者就宣告不再对vue-resource更新,而是推荐的axios,前一段时间用了一下,现在说一下它的基本用法. 首先就是引入axios,如果你使用es6,只需要安装axios ...