? 洛谷 P3056 [USACO12NOV]笨牛Clumsy Cows
Posted 一蓑烟雨任生平
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了? 洛谷 P3056 [USACO12NOV]笨牛Clumsy Cows相关的知识,希望对你有一定的参考价值。
P3056 [USACO12NOV]笨牛Clumsy Cows
题目描述
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:
)( ())( ((())))
给出一个偶数长度的括号序列,问最少修改多少个括号可以使其平衡。
输入输出格式
输入格式:
- Line 1: A string of parentheses of even length at most 100,000 characters.
输出格式:
- Line 1: A single integer giving the minimum number of parentheses that must be toggled to convert the string into a balanced string.
输入输出样例
说明
The last parenthesis must be toggled, and so must one of the two middle right parentheses.
#include<cstdio> #include<cstring> #include<iostream> #include<algorithm> #define N 100010 using namespace std; char s[N]; int head,tail,ans; int main(){ scanf("%s",s); head=tail=0; int len=strlen(s); for(int i=0;i<len;i++){ if(s[i]==‘(‘) tail++; else { if(tail>head) tail--; else tail++,ans++; } } if(tail!=head) ans+=(tail-head)/2; printf("%d",ans); }
以上是关于? 洛谷 P3056 [USACO12NOV]笨牛Clumsy Cows的主要内容,如果未能解决你的问题,请参考以下文章
洛谷 P1879 [USACO06NOV]玉米田Corn Fields
洛谷 P1879 [USACO06NOV]玉米田Corn Fields
洛谷 P2888 [USACO07NOV]牛栏Cow Hurdles