2017.5.6 表达式的值 思考记录
这个题严重不符普及组的身份、、虽然是模拟,但如果想不清楚是很难入手的
首先判断哪个位置有数,肯定先找运算符、、
这是其实只用看这一个符号和上一个符号,害怕遗漏的话可以罗列一下:
(+ : +号前一定有数
)+ : +号前一定没有数
+ +: +号前一定有数
* +: +号前一定有数
所以只要+号前不是)就有数
而且要考虑运算符后面的,就需要对右括号进行同“+”的处理,不同的是这个右括号要一直推到左括号
用运算符优先级的方法建立两个栈处理运算::能放就放,如果+号前是*号就一直把*法做完、
码:
#include<iostream>
#include<cstdio>
using namespace std;
int n,i,shucnt,fucnt;
char ch[100006],fu[100006];
struct oo
{int yi,ling;
}zhan[100006];
int main()
{scanf("%d",&n);for(i=1;i<=n;i++){scanf("%c",&ch[i]); while(ch[i]=='\n')scanf("%c",&ch[i]); }
ch[0]='(';
ch[++n]=')';for(i=0;i<=n;i++){
if(ch[i]=='+')
{if(ch[i-1]!=')'){++shucnt;zhan[shucnt].ling=1;zhan[shucnt].yi=1;}while(fu[fucnt]=='*'){--fucnt;--shucnt;int linling=(zhan[shucnt].yi*zhan[shucnt+1].ling+zhan[shucnt].ling*zhan[shucnt+1].yi+zhan[shucnt].ling*zhan[shucnt+1].ling)%10007;int linyi=(zhan[shucnt].yi*zhan[shucnt+1].yi)%10007;zhan[shucnt].yi=linyi;zhan[shucnt].ling=linling;}++fucnt;fu[fucnt]='+';
}
if(ch[i]=='*')
{++fucnt;fu[fucnt]='*';if(ch[i-1]!=')'){++shucnt;zhan[shucnt].ling=1;zhan[shucnt].yi=1; }
}
if(ch[i]==')')
{if(ch[i-1]!=')'){++shucnt;zhan[shucnt].ling=1;zhan[shucnt].yi=1;}while(fu[fucnt]!='('){int linling;int linyi;if(fu[fucnt]=='+'){shucnt--;linling=(zhan[shucnt].ling*zhan[shucnt+1].ling)%10007;linyi=(zhan[shucnt].ling*zhan[shucnt+1].yi+zhan[shucnt].yi*zhan[shucnt+1].ling+zhan[shucnt+1].yi*zhan[shucnt].yi)%10007;
zhan[shucnt].ling=linling;
zhan[shucnt].yi=linyi; }else{shucnt--;linling=(zhan[shucnt].ling*zhan[shucnt+1].yi+zhan[shucnt].yi*zhan[shucnt+1].ling+zhan[shucnt+1].ling*zhan[shucnt].ling)%10007;linyi=(zhan[shucnt].yi*zhan[shucnt+1].yi)%10007;
zhan[shucnt].ling=linling;
zhan[shucnt].yi=linyi;}fucnt--; }fucnt--;
}
if(ch[i]=='(')++fucnt,fu[fucnt]='(';
} printf("%d",zhan[shucnt].ling%10007);
}
2017.5.6 表达式的值 思考记录相关推荐
- 2017.5.6 联合权值 思考记录
曾经感觉非常难的题 现在一遍过了.. 主要是有前缀和的思想 和取最大值和次大值的乘积由小技巧:: 只保存一个最大值 ,和每个数*,直到这个最大值被更新.. 由于每次乘都是在1~当前这个数的最大 ...
- 2017.10.5 最短母串 思考记录
这个题n<=15,可以用10表示选取情况下的最优值 预处理两个串之间的连接关系,然后枚举状态转移 然而这个题还要输出方案,,而且还不让你开空间. 所以只能记录前继动态判断.. 所以十分难写难调 ...
- 2017.9.28 CF #R2 B 思考记录
题目大意: 给一个n*n的图,每个点有点权,求从左上角走到右下角,把一路的点权乘起来,求后缀零个数最小值,并输出方案 首先0是特例,因为走了他,后缀零个数一定是1 然后如果有数字相乘得到0,那相当于* ...
- 2017.9.26 块的计数 思考记录
这种题就属于那种描述很简单,要求很简单,但就是无从下手的题 这个题我只有n根n做法..枚举因数检验.. 首先对于任何块的大小,方案唯一,这是显然的,,如果划分位置改变1,一定有一个位置+1,一个位置- ...
- 2017.9.14 棘手的操作 思考记录
mdzz,手残没法治 一开始想按编号顺序用splay维护最值,但没法查找 然后想用线段树启发式合并,然而空间会爆 由于连接之后的连通块顺序没有关系,所以可以考虑并查集来表示区间,然后就可以用线段树维护 ...
- 2017.9.1 公路修建问题 思考记录
竟然一遍A了湖南省选题.感人至深 这个题一看便知是要二分的. 所以剩下的就是利用构造树来检验 首先,对于c1,我们可以求一颗最小生成树,来保留尽可能多的边(因为大于检验值的都不合法,需要删掉,为了让保 ...
- 2017.8.8 魔兽地图DotR 思考记录
假题害人.. 明明说了是一棵树,却还要强行加一组坑爹数据 所以网上的题解挂了好多 这题是很综合的树上背包问题. 由依赖关系转化为一些枚举来跑多重背包 由于是 "一棵树" 所以 ...
- 2017.3.25 SJY摆石子 思考记录
终于找到了一个kd树的题..来看看 k-d树原理还是不难的,就是代码技巧比较多可能可读性比较差 它就是把一个平面分成: 找最接近的点原理是利用极值矩形: 这个题就是k-d树板子题了. 下面的注释很详细 ...
- 2017.3.25 魔术球问题 思考记录
这个题还是不难的..(想了20分钟就出完解) 二分+网络流检验,,能加在上面的数大的向小的连边 总点数-最大匹配>n :{l=mid+1, 记录答案 } else ...
最新文章
- 脑源(brainsourcing)技术可以自动识别人类的偏好
- MATLAB的iptchecknargin函数详解
- 用Apache Hadoop和Apache Solr处理和索引医学图像
- VMware虚拟机提示“以独占方式锁定此配置文件失败”解决方案
- yaf mysql_Yaf框架的配置
- Vue 打包后打开为空白页面 并且控制台报错‘Failed to load resource: net::ERR_FILE_NOT_FOUND’
- Pytorch MNIST直接离线加载二进制文件到pytorch
- 嵌入式 uboot引导kernel,kernel引导fs【转】
- java基础面试题之:普通类和抽象类有哪些区别?
- 「AtCoder Grand018A」Getting Difference(GCD)
- Visual Studio 2013 编译Notepad++源码
- Gym 100633G Nano alarm-clocks
- windows C盘自动清理bat脚本
- 嵌入式系统中常用的通信接口技术
- linux 培训感谢信,应用文(考试)应用文(考).doc
- 【Java SE】数组
- 汇正财经骗局?科创50大涨
- 狂神 Linux 学习笔记
- MySQL架构与业务总结图
- c++dll导入导出宏定义,出现“无法定义dllimport 实体”和“不允许dllimport 静态数据成员的定义”的问题
热门文章
- linux 物理内存用完了_12张图解Linux内存管理,程序员内功修炼,看过都说懂了!...
- leetcode306 2022.1.10
- Think in Java第四版 读书笔记1
- java 嵌套类: Nested classes
- python matplotlib画图遇到的问题——标题重叠问题
- 【李宏毅机器学习】Brief Introduction of Deep Learning 深度学习简介(p12) 学习笔记
- C中的运算符优先级和结合性 *p++
- 没有Dubbo Admin,怎么查看zookeeper中注册的dubbo服务?
- Python列表:list
- 02_使用jq实现进入和离开动画