首页 > 代码库 > BZOJ3016 [Usaco2012 Nov]Clumsy Cows

BZOJ3016 [Usaco2012 Nov]Clumsy Cows

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

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

 

BZOJ3016 [Usaco2012 Nov]Clumsy Cows