Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
其实不需要用栈,维护一个计数就可以了,代码很简单代码仅供示意和理解 char s[2010],c,*p; int main() { int id=1, lb, rb; while (gets(s) && s[0] != '-') { lb = 0; rb = 0; p = s; while (c = *p++) { // lb和rb分别记录当前剩余的左括号数和右括号数 // 逐个扫描字符串若发现左括号,左括号计数+1 // 如果是右括号,抵消掉一个左括号,左括号-1,直到左括号抵消完,右括号计数+1 if (c == '{') lb++; else if (lb > 0) lb--; else rb++; } // 左右括号两两抵消,最后剩余的只可能是3种情况 // 1.剩偶数个左括号 // 2.剩偶数个右括号 // 3.剩若干个右括号和若干个左括号 // 对于1和2,只要调整一半的括号就能达到平衡 // 对于3,如果剩余的左右都是偶数,那么各自调整一半;如果剩余都是奇数,各自调整一半以后,还剩一个右括号和一个左括号,需要调整2次才能平衡,需要额外增加2 // 综合以上情况,可以写出统一的式子如下 printf("%d. %d\n", id++, (lb + rb) / 2 + lb % 2); } } Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator