Codeforces 552E - Vanya and Brackets (中缀表达式求值)
2015-08-10 12:53
459 查看
左括号一定在*和+之间,右括号一定在+和+乘之间。乘号最多15个所以可以暴力枚举括号位置。
#include <iostream> #include <cstdio> #include <cstring> #include <stack> #define LL long long using namespace std; #define maxn 5005 char s[maxn]; int ps1[maxn]; int ps2[maxn]; LL num[maxn]; char sig[maxn]; int nn,sn; int len; int pri(char c){ if(c=='+'||c=='-') return 1; if(c=='*'||c=='/') return 2; if(c=='(') return 0; } void cal(){ if(sig[sn]=='+') num[nn-1]=num[nn]+num[nn-1]; if(sig[sn]=='-') num[nn-1]=num[nn-1]-num[nn]; if(sig[sn]=='*') num[nn-1]=num[nn-1]*num[nn]; if(sig[sn]=='/') num[nn-1]=num[nn-1]/num[nn]; nn--; sn--; } LL solve(int l,int r){ if(r<l) return 0; nn=sn=0; int curn=0; for(int i=0;i<=len;i++){ if(i==l) sig[++sn]='('; if(isdigit(s[i])){ curn=curn*10+s[i]-'0'; } else { if(i-1!=r){ num[++nn]=curn; curn=0; } if(sn&&pri(s[i])<=pri(sig[sn])) cal(); sig[++sn]=s[i]; } if(i==r) { num[++nn]=curn; curn=0; while(sig[sn]!='(') cal(); sn--; } } if(len!=r) num[++nn]=curn; while(nn>1) cal(); return num[1]; } int main(){ while(~scanf("%s",s)){ int n1=0,n2=0; len=strlen(s); LL res=solve(0,len-1); ps1[++n1]=0; for(int i=1;i<len-2;i+=2){ if(s[i]=='*'&&s[i+2]=='+') ps1[++n1]=i+1; } for(int i=1;i<len-2;i+=2){ if(s[i]=='+'&&s[i+2]=='*') ps2[++n2]=i+1; } ps2[++n2]=len-1; int clen; for(int i=1;i<=n1;i++){ for(int j=1;j<=n2;j++){ int s=ps1[i]; int t=ps2[j]; if(s>t) continue; res=max(res,solve(s,t)); } } printf("%I64d\n",res); } return 0; }
相关文章推荐
- POJ EXTENDED LIGHTS OUT 1222【高斯消元+位运算】
- hadoop排序组合键的使用情况
- BZOJ 3359: [Usaco2004 Jan]矩形( dp )
- APP性能测试工具GT
- cocos2d-x 3.7 win7 32+Android 环境配置
- 为什么想得慢的人能赢,程序员又如何
- C语言-05-内存分析
- 向eclipse中导入myeclipse项目
- 【Android开发】消息处理类(Handler)与消息类(Message)介绍
- 程序员常去的14个顶级开发社区
- 语音识别&语音朗诵
- CoreAnimation --- CALayer
- Android AsyncHttpClient图片上传
- 位运算求组合,poj2453
- 初试 Julia 语言
- HDU 3397 Sequence operation (线段树区间合并入门)
- Atitit.软件button和仪表板(13)--全文索引操作--db数据库子系统mssql2008
- LIBRARY_PATH和LD_LIBRARY_PATH环境变量的区别
- poj 1515 Street Directions 【tarjan 求割边】【确定无向图边的方向 将其变成有向强连通图】
- sed