模拟——删除不必要的括号
来源:互联网 发布:车床切断面编程 编辑:程序博客网 时间:2024/05/20 10:53
注意:( (x+y) )z 这种情况,括号中的+共用!
出数据时注意复用的非常规情况。
(x+( (x+y) ( y ) ( t ) +m ) )z
#include<cstdio>#include<cstdlib>#include<algorithm>#include<cmath>#include<cstring>#include<vector>using namespace std;char s[2010];int p[2010],flag[2010],stack[2010];//很显然用栈结构来做 int main(){while(scanf("%s",s)!=EOF){int top=-1;memset(p,0,sizeof(p));memset(flag,0,sizeof(flag));int len=strlen(s);for(int i=0;i<len;i++){if(s[i]=='(')stack[++top]=i;else if(s[i]=='+')flag[stack[top]]=1;else if(s[i]==')'){bool f=i<len-1&&s[i+1]!='+'&&s[i+1]!=')';bool g=stack[top]>0&&s[stack[top]-1]!='+'&&s[stack[top]-1]!='(';//当括号内部有加法,并且外部乘以某数时,括号不能删除 if(!(flag[stack[top]]&&(f||g)))p[stack[top]]=p[i]=1;//当两个括号紧邻(())时,括号内部的加号共用 if(i<len-1&&s[i+1]==')'&&stack[top]>0&&s[stack[top]-1]=='(')flag[stack[top-1]]=flag[stack[top]];top--;}}for(int i=0;i<len;i++)if(p[i]==0)printf("%c",s[i]);printf("\n");}return 0;}
0 0
- 模拟——删除不必要的括号
- UVALive 4882 Parenthesis 删除不必要的括号 模拟题
- ubuntu - 删除除不必要的内核版本
- 删除不必要的描述文件mobileProvision
- <Android> 系统编译删除不必要的Apk
- 模拟,括号匹配——Parentheses Balance
- 小提示——避免不必要的自动装箱、拆箱
- Effective java1——避免创建不必要的对象
- Effective Java 2.5——避免创建不必要的对象
- Microsoft Visual Studio2005中删除不必要的最近的项目
- 如何删除不必要的开票的出库单?
- 如何删除不必要的开票的出库单?
- 删除Windows中不必要的自动运行设置
- 用数组模拟栈—— 括号匹配(二)
- 模拟括号
- poj1068 简单的括号匹配模拟
- nefu1040关于括号的简单模拟题
- hdu 5831 栈模拟括号的应用
- Foundation框架(15)——NSObject的常用方法、OC中的反射
- 良好的生活习惯是追求精致生活的必要条件
- VELT-0.1.3开发: VC++目录
- XSS跨站漏洞(Cross-site scripting):
- 移植C/C++程序到不同平台时需要留意的地方
- 模拟——删除不必要的括号
- windows下C语言多线程编程
- Find duplicates in O(n) time and O(1) extra space
- 单词长度(15)
- uva 11300(贪心)
- Android TextView
- 整数趣题(有限5位数)
- HDU 3342 Legal or Not
- 【BZOJ 1022】 [SHOI2008]小约翰的游戏John