博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【P3056】【USACO12NOV】笨牛Clumsy Cows
阅读量:5458 次
发布时间:2019-06-15

本文共 2204 字,大约阅读时间需要 7 分钟。

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.

输入输出样例

输入样例#1:
())(
输出样例#1:
2

说明

The last parenthesis must be toggled, and so must one of the two middle right parentheses.

陷入dp的泥潭无法自拔,然后终于在题解中看到了一个真·贪心。

其实可以这样贪:只需保证每一个前缀左括号数目大于等于右括号的数目即可。

这样的话有两种贪法(但其实是一种而已?)

#include 
#include
#include
#include
#include
const int MAXN = 100000 + 10;char str[MAXN];int n;int cnt;int num;int main(){ freopen("data.txt", "r", stdin); scanf("%s", str + 1); n = strlen(str + 1); for(int i = 1;i <= n;i ++) { if(str[i] == '(' )num ++; else num--; if(num < 0)cnt++,num+=2; } printf("%d", cnt + num/2); return 0;}
#include 
#include
#include
#include
#include
const int MAXN = 100000 + 10;char str[MAXN];int n;int cnt;int num;int main(){ freopen("data.txt", "r", stdin); scanf("%s", str + 1); n = strlen(str + 1); for(int i = 1;i <= n;i ++) { if(str[i] == '(' )num ++; else if(str[i] == ')' && num > 0)num--; else cnt++,num++; } printf("%d", cnt + num/2); return 0;}

转载于:https://www.cnblogs.com/huibixiaoxing/p/6537735.html

你可能感兴趣的文章
个人工作总结18
查看>>
yui cookie Dynamically Change Text Size Using Javascript 动态设置字体大小,写入Cookie
查看>>
elasticsearch-query-builder, 一款可以基于配置化以及参数绑定的ES语句构造神器
查看>>
Java 异常处理
查看>>
Sql中获取表结构(字段名称,类型,长度,说明)
查看>>
90. Subsets II
查看>>
jQuery常用语法
查看>>
隐藏浏览器原生的滚动条
查看>>
[spring mvc]<mvc: annotation-driven />的作用
查看>>
jsplumb
查看>>
20135304刘世鹏——信息安全系统设计基础第十二周总结
查看>>
C++ 连接mysql数据库
查看>>
基于C#开发的简易贪吃蛇
查看>>
Vue 源码解析:深入响应式原理(上)
查看>>
poj2318 TOYS
查看>>
012木桶绕圆滚动
查看>>
having的用法以及与where区别介绍
查看>>
责任链模式
查看>>
Python并行编程(五):线程同步之信号量
查看>>
SQLServer 日期函数大全
查看>>