zoukankan      html  css  js  c++  java
  • noip模拟赛 括号序列

    题目描述
    LYK有一个括号序列,但这个序列不一定合法。
    一个合法的括号序列如下:
    ()是合法的括号序列。
    若A是合法的括号序列,则(A)是合法的括号序列。
    若A和B分别是合法的括号序列,则AB是合法的括号序列。
    LYK想通过尽可能少的操作将这个不一定合法的括号序列变成合法的括号序列。一次修改操作是将某个字符变成另一个字符。
    你能帮帮它吗?

    输入格式(bracket.in)
    一行一个字符串S。

    输出格式(bracket.out)
    一个数表示最少修改次数。

    输入样例
    ()))

    输出样例
    1

    样例解释
    将第二个字符修改成(即可。

    数据范围
    对于30%的数据|S|<=10。
    对于60%的数据|S|<=1000。
    对于100%的数据|S|<=100000。且|S|是偶数。

    分析:比较水的一道题,将所有符合要求的括号序列给删掉,剩下的大概长这样:)))))(((((,假设有cnt1个),cnt2个(,那么每个)转一下可以与)配对,如果是奇数个,那么肯定还要和(配对,所以答案是cnt1/2 + cnt1 % 2 + cnt2/2 + cnt2 % 2.

    #include <stack>
    #include <cstdio>
    #include <cstring>
    #include <iostream>
    #include <algorithm>
    
    using namespace std;
    
    char s[100010];
    int cnt1, cnt2, ans;
    
    int main()
    {
        scanf("%s", s + 1);
        for (int i = 1; i <= strlen(s + 1); i++)
        {
            if (s[i] == '(')
                cnt1++;
            else
                if (s[i] == ')' && cnt1)
                    cnt1--;
                else
                    cnt2++;
        }
        ans = cnt1 / 2 + (cnt1 % 2) + cnt2 / 2 + (cnt2 % 2);
        printf("%d
    ", ans);
    
        return 0;
    }
  • 相关阅读:
    学习canvas过程中的小菜鸟
    小菜鸟谈html语义化
    mui常用方法
    mui的侧滑菜单如何禁用手势侧滑
    ajax 传递数组参数
    LNMP状态管理命令
    LNMP相关软件目录及文件位置
    ubuntu常用命令
    Ubuntu设置允许root用户登录
    linux一键安装web环境(sh-1.3.0)
  • 原文地址:https://www.cnblogs.com/zbtrs/p/7683157.html
Copyright © 2011-2022 走看看