表达式求值(noip2015等价表达式)
题目大意
给一个含字母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=(d10+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等价表达式)的更多相关文章
- leetcode算法学习----逆波兰表达式求值(后缀表达式)
下面题目是LeetCode算法:逆波兰表达式求值(java实现) 逆波兰表达式即后缀表达式. 题目: 有效的运算符包括 +, -, *, / .每个运算对象可以是整数,也可以是另一个逆波兰表达式.同 ...
- C++之字符串表达式求值
关于字符串表达式求值,应该是程序猿们机试或者面试时候常见问题之一,昨天参加国内某IT的机试,压轴便为此题,今天抽空对其进行了研究. 算术表达式中最常见的表示法形式有 中缀.前缀和 后缀表示法.中缀表示 ...
- 蓝桥杯算法训练 java算法 表达式求值
问题描述 输入一个只包含加减乖除和括号的合法表达式,求表达式的值.其中除表示整除. 输入格式 输入一行,包含一个表达式. 输出格式 输出这个表达式的值. 样例输入 1-2+3*(4-5) 样例输出 - ...
- 【ACM】nyoj_305_表达式求值_201308081018
表达式求值时间限制:3000 ms | 内存限制:65535 KB 难度:3描述 Dr.Kong设计的机器人卡多掌握了加减法运算以后,最近又学会了一些简单的函数求值,比如,它知道函数min(20, ...
- NC16539 [NOIP2013]表达式求值
NC16539 [NOIP2013]表达式求值 题目 题目描述 给定一个只包含加法和乘法的算术表达式,请你编程计算表达式的值. 输入描述 输入仅有一行,为需要你计算的表达式,表达式中只包含数字.加法运 ...
- 用Python3实现表达式求值
一.题目描述 请用 python3 编写一个计算器的控制台程序,支持加减乘除.乘方.括号.小数点,运算符优先级为括号>乘方>乘除>加减,同级别运算按照从左向右的顺序计算. 二.输入描 ...
- 数据结构算法C语言实现(八)--- 3.2栈的应用举例:迷宫求解与表达式求值
一.简介 迷宫求解:类似图的DFS.具体的算法思路可以参考书上的50.51页,不过书上只说了粗略的算法,实现起来还是有很多细节需要注意.大多数只是给了个抽象的名字,甚至参数类型,返回值也没说的很清楚, ...
- nyoj305_表达式求值
表达式求值 时间限制:3000 ms | 内存限制:65535 KB 难度:3 描述 Dr.Kong设计的机器人卡多掌握了加减法运算以后,最近又学会了一些简单的函数求值,比如,它知道函数min ...
- 利用栈实现算术表达式求值(Java语言描述)
利用栈实现算术表达式求值(Java语言描述) 算术表达式求值是栈的典型应用,自己写栈,实现Java栈算术表达式求值,涉及栈,编译原理方面的知识.声明:部分代码参考自茫茫大海的专栏. 链栈的实现: pa ...
随机推荐
- JavaScript中的类型转换
1.隐式类型转换 ①== 如果相等操作的两个变量不是同一类型,那么相等运算符会尝试进行一些类型转换: 如果一个是null,一个是undefined,则他们相等: 如果一个值是数字,另一个是字符串,先将 ...
- dataTables获取当前行json格式数据
装载表格数据 $(document).ready( function () { //页面加载后装载表格数据 var table = $('#mytable').DataTable( { "s ...
- solr服务(搜索服务)
1 Solr实现全文搜索 1.1 Solr是什么? Solr 是Apache下的一个顶级开源项目,采用Java开发,它是基于Lucene的全文搜索服务器.Solr提供了比Lucene更为丰富的 ...
- 基于fastweixin的微信开发环境搭建(一)
由于公司业务需要,开发微信版本,才开始接触微信公众平台.在github折腾了几天,试过好几个微信sdk,最终选择fastweixin.个人觉得这个框架还是值得使用的,使用也简单.那么问题来了,很多人想 ...
- Spring特性--DI
DI:Dependency Injection(依赖注入),通俗的讲就是一种通过xml配置文件,为交给sping容器的对象初始化参数.又称做控制反转:Inversion of Control(IoC) ...
- 轮播插件unsilder 源码解析(一)---使用
啰嗦几句:学习的可以直接省略,一直本着写原生的插件想法,但是前天看了吕大豹的博客觉得自己都没有正经的写个jquery插件:所以在开始写之前我会先对几个比较热门的jquery的插件进行源码分析:至于为什 ...
- 我的页面定制CSS代码(SimpleGamboge皮肤)
我的页面定制CSS代码,针对博客园SimpleGamboge皮肤. 调整: 1.左上图片更换为自己的头像 2.扩大左侧栏宽度,缩小右侧主栏宽度宽度 3.扩大内容页面的评论区宽度,工具图标靠左 4.去广 ...
- javascript实用技巧、javascript高级技巧
字号+作者:H5之家 来源:H5之家 2016-10-31 11:00 我要评论( ) 三零网提供网络编程. JavaScript 的技术文章javascript实用技巧.javascript高级技巧 ...
- 编译安装PHP7并安装Redis扩展Swoole扩展
编译安装PHP7并安装Redis扩展Swoole扩展 在编译php7的机器上已经有编译安装过php5.3以上的版本,从而依赖库都有了 本php7是编译成fpm-php 使用的, 如果是apache那么 ...
- Mysql安装及主从复制配置
1.下载 mysql数据库 wget http://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.9-linux-glibc2.5-x86_64.ta ...