【BZOJ】3016: [Usaco2012 Nov]Clumsy Cows

原创 2016年08月28日 16:14:05


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 keeps mis-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)是合法的;
     AB都是合法的,则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

题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=3016   比较有意思的一道题,似乎哪次打ACM的时候碰到过类似的   算是贪心题吧 ...

3016: [Usaco2012 Nov]Clumsy Cows

Description Bessie the cow is trying to type a balanced string of parentheses into her new laptop...

我是如何成为一名python大咖的?

人生苦短,都说必须python,那么我分享下我是如何从小白成为Python资深开发者的吧。2014年我大学刚毕业..

bzoj2060[USACO2010,Nov]Visiting Cows拜访奶牛

树型DP

【BZOJ】2060: [Usaco2010 Nov]Visiting Cows 拜访奶牛

题目大意: 给定一些无向边组成的一棵树,对于树的每一条边至多选择一个节点,求整棵树最多选择多少个节点。

BZOJ 2060: [Usaco2010 Nov]Visiting Cows 拜访奶牛

Description 经过了几周的辛苦工作,贝茜终于迎来了一个假期.作为奶牛群中最会社交的牛,她希望去拜访N(1C2).这样,在每一对奶牛之间都有一条唯一的通路. FJ希望贝茜尽快的回到农场....

【BZOJ 2060】 [Usaco2010 Nov]Visiting Cows 拜访奶牛

树形dp~

【bzoj 2060】[Usaco2010 Nov]Visiting Cows 拜访奶牛(树形dp)

浊酒一壶寄天际,转身波光碎渐远

bzoj 3018: [Usaco2012 Nov]Distant Pastures

跑n*n遍的spfa 每次最后取个max就好 #include #include #include #include using namespace std; struct node{ int ...

bzoj2621 [Usaco2012 Mar]Cows in a Skyscraper奶牛乘电梯

状压dp

[Usaco2013 Nov]Crowded Cows

题目大意 N头牛在一个坐标轴上,每头牛有个高度。现给出一个距离值D。 如果某头牛在它的左边,在距离D的范围内,如果找到某个牛的高度至少是它的两倍,且在右边也能找到这样的牛的话。则此牛会感觉到不舒服...
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)