【BZOJ】3016: [Usaco2012 Nov]Clumsy Cows
2016-08-28 16:14
337 查看
Description
Bessie the cow is trying to type a balanced string of parentheses into her new laptop, but she is sufficiently clumsy (due to her large hooves) that she keepsmis-typing characters. Please help her by computing the minimum number of characters in the string that one must reverse (e.g., changing a left parenthesis to a right parenthesis, or vice versa) so that the string would become balanced. There are several ways
to define what it means for a string of parentheses to be "balanced". Perhaps the simplest definition is that there must be the same total number of ('s and )'s, and for any prefix of the string, there must be at least as many ('s as )'s. For example, the
following strings are all balanced:
()
(())
()(()())
while these are not:
)(
())(
((())))
问题描述
给定长度为n的一个括号序列,每次修改可以修改一个位置的括号,若这个括号为’(‘,则修改为’)’,若这个括号为’)’,则修改为’(‘,问最少修改多少个使得原括号序列合法。
其中:
①
()是合法的;
②
若A是合法的,则(A)是合法的;
③
若A,B都是合法的,则AB是合法的。
Input
一个长度为n个括号序列。Output
最少的修改次数。
Sample Input
())(Sample Output
2样例说明
修改为()(),其中红色部分表示修改的括号。
数据范围
100%的数据满足:1 <= n <= 100,000。
HINT
Source
Silver题解:
直接乱搞。。我们发现,当一个括号序列合法的时候,当且仅当这个序列的每一个位置之前的所有左括号的个数都大于等于右括号的个数,所以我们可以用计数器模拟一个类似栈的东西,然后如果栈内元素为0(即之前所有左右括号数目相等),如果这个时候来的是右括号的时候,我们就可以判定为要改变这个括号。最后把栈内的多余的左括号的一半改成右括号就可以了
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
using namespace std;
const int MAXN=10001;
int main(int argc, char *argv[])
{
int d=0,n,i;
int ans=0;
char x;
while(cin>>x)
{
if(x=='(') d++;
else if(x==')'&&d>=1) d--;
else if(x==')'&&d==0) ans++,d++;
}
ans+=(d+1)/2;
printf("%d\n",ans);
return 0;
}
相关文章推荐
- 【BZOJ】3016: [Usaco2012 Nov]Clumsy Cows(贪心)
- bzoj3016 [Usaco2012 Nov]Clumsy Cows
- bzoj3016 [Usaco2012 Nov]Clumsy Cows
- bzoj 3016: [Usaco2012 Nov]Clumsy Cows 栈
- BZOJ3016 [Usaco2012 Nov]Clumsy Cows
- 3016: [Usaco2012 Nov]Clumsy Cows
- 3016: [Usaco2012 Nov]Clumsy Cows
- 3016: [Usaco2012 Nov]Clumsy Cows
- bzoj3018 [Usaco2012 Nov]Distant Pastures
- bzoj 3018: [Usaco2012 Nov]Distant Pastures
- bzoj3016: [Usaco2012 Nov]Clumsy Cows
- BZOJ3016: [Usaco2012 Nov]Clumsy Cows
- [倍增Floyd] BZOJ 1706 [usaco2007 Nov]relays 奶牛接力跑
- bzoj1642[Usaco2007 Nov]Milking Time 挤奶时间
- 【bzoj2023/1630】[Usaco2005 Nov]Ant Counting 数蚂蚁 dp
- BZOJ 1741 [Usaco2005 nov]Asteroids 穿越小行星群 二分图最小覆盖
- 【BZOJ】1642: [Usaco2007 Nov]Milking Time 挤奶时间(dp)
- 【bzoj1618】【Usaco2008 Nov]】Buying Hay 购买干草
- 【BZOJ】1707: [Usaco2007 Nov]tanning分配防晒霜
- bzoj 1724: [Usaco2006 Nov]Fence Repair 切割木板【堆】