1690 (Your)((Term)((Project)))
問題概要
- ,-,(),および一文字の変数からなる式が与えられる。
この式の括弧をできるだけ外し、空白を取り除いた式を出力せよ。
ただし-二回が+になるような変形は行ってはならない。
ソースコード
int m; string in; char in2[300]; string func(int s,int t) { int i=t-1,d=0; for(;i>s;i--) { if(in[i]==')')d++; if(in[i]=='(')d--; if(d==0&&(in[i]=='-'||in[i]=='+'))break; } if(i>s) { string a=func(s,i),b=func(i+1,t); if(in[i]=='+')return a+"+"+b; d=0; bool op=0; rep(j,b.size()) { if(b[j]=='(')d++; if(b[j]==')')d--; if(d==0&&(b[j]=='-'||b[j]=='+'))op=1; } if(op)return a+"-("+b+")"; return a+"-"+b; } if(in[s]=='(')return func(s+1,t-1); return in.substr(s,1); } int main() { scanf("%d ",&m); rep(i,m) { gets(in2); in.clear(); for(int i=0;in2[i];i++)if(in2[i]!=' ')in.pb(in2[i]); cout<<func(0,in.size())<<endl; } return 0; }