首页 > 其他 > 详细

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

时间:2018-08-24 01:29:51      阅读:241      评论:0      收藏:0      [点我收藏+]

题目

传送门: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 }

 

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

原文:https://www.cnblogs.com/noblex/p/9527261.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!