日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

CodeForces - 224C. Bracket Sequence (栈模拟)简单做法

發布時間:2023/12/15 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 CodeForces - 224C. Bracket Sequence (栈模拟)简单做法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

A bracket sequence is a string, containing only characters “(”, “)”, “[” and “]”.

A correct bracket sequence is a bracket sequence that can be transformed into a correct arithmetic expression by inserting characters “1” and “+” between the original characters of the sequence. For example, bracket sequences “()[]”, “([])” are correct (the resulting expressions are: “(1)+[1]”, “([1+1]+1)”), and “](” and “[” are not. The empty string is a correct bracket sequence by definition.

A substring s[l… r] (1?≤?l?≤?r?≤?|s|) of string s?=?s1s2… s|s| (where |s| is the length of string s) is the string slsl?+?1… sr. The empty string is a substring of any string by definition.

You are given a bracket sequence, not necessarily correct. Find its substring which is a correct bracket sequence and contains as many opening square brackets ?[? as possible.

Input
The first and the only line contains the bracket sequence as a string, consisting only of characters “(”, “)”, “[” and “]”. It is guaranteed that the string is non-empty and its length doesn’t exceed 105 characters.

Output
In the first line print a single integer — the number of brackets ?[? in the required bracket sequence. In the second line print the optimal sequence. If there are more than one optimal solutions print any of them.
Examples

Input
([])
Output
1
([])
Input
(((
Output
0
括號是就近匹配的,所以可以用棧來模擬,所以可以將括號壓棧,匹配后出棧,最后棧底剩余的就是不能出棧的就是不能匹配的,一般的方法是找到這些括號但是太費勁了,我們同時建立一個棧,同時入棧,出棧,存括號的下標,那么在出棧操作之后,第一個stack就只剩下不匹配的括號,第二個stack就只剩下不匹配的括號的下標。
下標將括號數組分成了好幾段,枚舉每一段的左中括號的數量即可,比較最大值更新左右段點即可

#include <bits/stdc++.h> using namespace std; const int maxn=100005; int b[maxn]={0}; stack<int>demo; stack<int>de; vector<int>ans; string a; int main() {while(!demo.empty())demo.pop();while(!de.empty())de.pop();ans.clear(); //初始化操作cin>>a;int n=a.size();for(int i=0;i<a.size();i++){if(a[i]=='(') b[i]=-2;else if(a[i]==')') b[i]=2;else if(a[i]=='[') b[i]=-1;else b[i]=1;}for(int i=0;i<n;i++){if(demo.empty()||b[i]==-1||b[i]==-2){demo.push(b[i]);de.push(i);}else if(b[i]+demo.top()==0){demo.pop();de.pop();}else{demo.push(a[i]);de.push(i);}}if(demo.empty()){int res=0;for(int i=0;i<a.size();i++) if(a[i]=='[') res++;cout<<res<<endl<<a<<endl;return 0;}while(!de.empty()){ans.push_back(de.top());de.pop();}ans.push_back(n);//補足區間sort(ans.begin(),ans.end());int l,r=-1, /*補足區間*/ml,mr,res=0,maxi=0;for(int i=0;i<ans.size();i++){l=r+1;r=ans[i];res=0;for(int i=l;i<r;i++){if(a[i]=='[') res++;}if(res>maxi){ml=l;mr=r-1;maxi=res;}}if(maxi==0){cout<<0<<endl;return 0;}cout<<maxi<<endl;for(int i=ml;i<=mr;i++) cout<<a[i];cout<<endl; }

總結

以上是生活随笔為你收集整理的CodeForces - 224C. Bracket Sequence (栈模拟)简单做法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。