这个题严重不符普及组的身份、、虽然是模拟,但如果想不清楚是很难入手的

首先判断哪个位置有数,肯定先找运算符、、

这是其实只用看这一个符号和上一个符号,害怕遗漏的话可以罗列一下:

(+   :  +号前一定有数

)+ :  +号前一定没有数

+ +:  +号前一定有数

* +:  +号前一定有数

所以只要+号前不是)就有数

而且要考虑运算符后面的,就需要对右括号进行同“+”的处理,不同的是这个右括号要一直推到左括号

用运算符优先级的方法建立两个栈处理运算::能放就放,如果+号前是*号就一直把*法做完、

码:

#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 表达式的值 思考记录相关推荐

  1. 2017.5.6 联合权值 思考记录

    曾经感觉非常难的题   现在一遍过了.. 主要是有前缀和的思想  和取最大值和次大值的乘积由小技巧:: 只保存一个最大值  ,和每个数*,直到这个最大值被更新.. 由于每次乘都是在1~当前这个数的最大 ...

  2. 2017.10.5 最短母串 思考记录

    这个题n<=15,可以用10表示选取情况下的最优值 预处理两个串之间的连接关系,然后枚举状态转移 然而这个题还要输出方案,,而且还不让你开空间. 所以只能记录前继动态判断.. 所以十分难写难调 ...

  3. 2017.9.28 CF #R2 B 思考记录

    题目大意: 给一个n*n的图,每个点有点权,求从左上角走到右下角,把一路的点权乘起来,求后缀零个数最小值,并输出方案 首先0是特例,因为走了他,后缀零个数一定是1 然后如果有数字相乘得到0,那相当于* ...

  4. 2017.9.26 块的计数 思考记录

    这种题就属于那种描述很简单,要求很简单,但就是无从下手的题 这个题我只有n根n做法..枚举因数检验.. 首先对于任何块的大小,方案唯一,这是显然的,,如果划分位置改变1,一定有一个位置+1,一个位置- ...

  5. 2017.9.14 棘手的操作 思考记录

    mdzz,手残没法治 一开始想按编号顺序用splay维护最值,但没法查找 然后想用线段树启发式合并,然而空间会爆 由于连接之后的连通块顺序没有关系,所以可以考虑并查集来表示区间,然后就可以用线段树维护 ...

  6. 2017.9.1 公路修建问题 思考记录

    竟然一遍A了湖南省选题.感人至深 这个题一看便知是要二分的. 所以剩下的就是利用构造树来检验 首先,对于c1,我们可以求一颗最小生成树,来保留尽可能多的边(因为大于检验值的都不合法,需要删掉,为了让保 ...

  7. 2017.8.8 魔兽地图DotR 思考记录

    假题害人..  明明说了是一棵树,却还要强行加一组坑爹数据   所以网上的题解挂了好多 这题是很综合的树上背包问题. 由依赖关系转化为一些枚举来跑多重背包 由于是 "一棵树" 所以 ...

  8. 2017.3.25 SJY摆石子 思考记录

    终于找到了一个kd树的题..来看看 k-d树原理还是不难的,就是代码技巧比较多可能可读性比较差 它就是把一个平面分成: 找最接近的点原理是利用极值矩形: 这个题就是k-d树板子题了. 下面的注释很详细 ...

  9. 2017.3.25 魔术球问题 思考记录

    这个题还是不难的..(想了20分钟就出完解) 二分+网络流检验,,能加在上面的数大的向小的连边 总点数-最大匹配>n    :{l=mid+1,      记录答案       } else   ...

最新文章

  1. 脑源(brainsourcing)技术可以自动识别人类的偏好
  2. MATLAB的iptchecknargin函数详解
  3. 用Apache Hadoop和Apache Solr处理和索引医学图像
  4. VMware虚拟机提示“以独占方式锁定此配置文件失败”解决方案
  5. yaf mysql_Yaf框架的配置
  6. Vue 打包后打开为空白页面 并且控制台报错‘Failed to load resource: net::ERR_FILE_NOT_FOUND’
  7. Pytorch MNIST直接离线加载二进制文件到pytorch
  8. 嵌入式 uboot引导kernel,kernel引导fs【转】
  9. java基础面试题之:普通类和抽象类有哪些区别?
  10. 「AtCoder Grand018A」Getting Difference(GCD)
  11. Visual Studio 2013 编译Notepad++源码
  12. Gym 100633G Nano alarm-clocks
  13. windows C盘自动清理bat脚本
  14. 嵌入式系统中常用的通信接口技术
  15. linux 培训感谢信,应用文(考试)应用文(考).doc
  16. 【Java SE】数组
  17. 汇正财经骗局?科创50大涨
  18. 狂神 Linux 学习笔记
  19. MySQL架构与业务总结图
  20. c++dll导入导出宏定义,出现“无法定义dllimport 实体”和“不允许dllimport 静态数据成员的定义”的问题

热门文章

  1. linux 物理内存用完了_12张图解Linux内存管理,程序员内功修炼,看过都说懂了!...
  2. leetcode306 2022.1.10
  3. Think in Java第四版 读书笔记1
  4. java 嵌套类: Nested classes
  5. python matplotlib画图遇到的问题——标题重叠问题
  6. 【李宏毅机器学习】Brief Introduction of Deep Learning 深度学习简介(p12) 学习笔记
  7. C中的运算符优先级和结合性 *p++
  8. 没有Dubbo Admin,怎么查看zookeeper中注册的dubbo服务?
  9. Python列表:list
  10. 02_使用jq实现进入和离开动画