• 【Codeforces】CF 5 C Longest Regular Bracket Sequence(dp)


    题目

    传送门:QWQ

    分析

    洛谷题解里有一位大佬讲的很好。

    就是先用栈预处理出可以匹配的左右括号在数组中设为1

    其他为0

    最后求一下最长连续1的数量。

    代码

     1 #include <bits/stdc++.h>
     2 using namespace std;
     3 const int maxn=1e6+10;
     4 char  s[maxn];
     5 int vis[maxn], Stack[maxn], top;
     6 int main(){
     7     scanf("%s",s+1);
     8     int n=strlen(s+1);
     9     for(int i=1;i<=n;i++){
    10         if(s[i]=='('){ Stack[++top]=i;  }
    11         else if(top){
    12             vis[i]=1; vis[Stack[top]]=1; top--;
    13         }
    14     }
    15     int preans=0,ans=0;
    16     for(int i=1;i<=n;i++){
    17         if(vis[i]) preans++;
    18         else preans=0;
    19         ans=max(ans,preans);
    20     }
    21     preans=0;
    22     int tot=0;
    23     for(int i=1;i<=n;i++){
    24         if(vis[i]) preans++;
    25         else preans=0;
    26         if(preans==ans && ans!=0)  tot++;
    27     }
    28     if(!(ans==0&&tot==0)) printf("%d %d",ans,tot);
    29     else puts("0 1");
    30     return 0;
    31 }
  • 相关阅读:
    基于typora编写Markdown文档
    VMware Workstation常见的故障处理
    VMware Workstation产品常用的快捷键
    2
    1
    9
    8
    7
    6
    5
  • 原文地址:https://www.cnblogs.com/noblex/p/9527261.html
Copyright © 2020-2023  润新知