• cf-Round551-Div2-C. Serval and Parenthesis Sequence(贪心)


    题目链接:http://codeforces.com/contest/1153/problem/C

    题意:给定由'(',')','?'组成的字符串,问是否能将其中的?全部换成'(‘,’)'使得字符串的任意非空真字串不构成正确的括号表达式,而整个字符串构成括号表达式,其中正确的括号表达式是指通过插入'1','+'能构成算术式。

    思路:我们记'('为-1,')'为1,显然所有字串应满足前面的和<0,字串等于0的话就不满足字串不构成正确的括号表达式了,且整个字符串的和=0(题目可能出现'((((??'这样的数据,即无法构成正确的括号表达式的。我们用n1表示需要添加的'('的数量,n2表示要添加的')'的数量,利用贪心思想,将前n1个?全部换成'(',将剩下的?全换成')’。然后从头检查一遍即可。

    AC代码:

    #include<bits/stdc++.h>
    using namespace std;
    
    int n,n1,n2,flag=1;
    char s[300005];
    
    int main(){
        scanf("%d",&n);
        if(n%2==1){
            printf(":(
    ");
            return 0;
        }
        scanf("%s",s);
        for(int i=0;i<n;++i)
            if(s[i]=='(') ++n1;
            else if(s[i]==')') ++n2;
        n1=n/2-n1,n2=n/2-n2;
        int k=0;
        for(int i=0;i<n1;)
            if(s[k++]=='?') s[k-1]='(',++i;
        for(int i=0;i<n2;)
            if(s[k++]=='?') s[k-1]=')',++i;
        int tmp=0;
        for(int i=0;i<n-1;++i){
            if(s[i]=='(') --tmp;
            else ++tmp;
            if(tmp>=0){
                flag=0;
                break;
            }
        }
        if(s[n-1]=='(') --tmp;
        else ++tmp;
        if(tmp!=0) flag=0;
        if(flag)
            printf("%s
    ",s);
        else 
            printf(":(
    ");
        return 0;
    }
  • 相关阅读:
    Springboot整合activeMq
    linux下安装activeMq
    linux下配置jdk
    thinkphp5 集成 redis
    linux下安装redis
    tp5集成swagger
    lombok
    idea下springboot环境搭建
    Mac环境下maven安装配置
    idea环境下搭建swagger2接口文档
  • 原文地址:https://www.cnblogs.com/FrankChen831X/p/10704548.html
Copyright © 2020-2023  润新知