蒟蒻还是刷刷水。。。(不要问我这么沙茶的题为何要写题解)

Orz 海之树:"考虑每一个右括号必须要有一个在它之前的左括号相配对,所以用sum记录到当前位置位置还没有配对的左括号的数量。

如果为负数这说明必须有一个右括号要变为左括号,即ans++且sum+=2(因为少了一个右括号的同时多了一个左括号)。

最后加上剩余的未配对的左括号的数量的二分之一即为答案。"

 

 1 /**************************************************************
 2     Problem: 3016
 3     User: rausen
 4     Language: C++
 5     Result: Accepted
 6     Time:36 ms
 7     Memory:804 kb
 8 ****************************************************************/
 9  
10 #include <cstdio>
11  
12 using namespace std;
13  
14 int ans, sum;
15  
16 int main() {
17     char ch = getchar();
18     while (ch == '(' || ch == ')') {
19         if (ch == '(') ++sum;
20         else --sum;
21         if (sum < 0) ++ans, sum += 2;
22         ch = getchar();
23     }
24     ans += sum >> 1;
25     printf("%d\n", ans);
26     return 0;
27 }
View Code

 

posted on 2014-12-01 17:54  Xs酱~  阅读(186)  评论(0编辑  收藏  举报