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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

括号序列

發布時間:2023/12/10 编程问答 46 豆豆
生活随笔 收集整理的這篇文章主要介紹了 括号序列 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

題目描述

一個由小括號組成的字符串可以被稱為一個括號序列。但一個括號序列可能并不滿足括號匹配的要求。因此,我們可以進一步將滿足括號匹配的括號序列成為“標準的括號序列。例如字符串")((())"是一個括號序列但不是標準的括號序列,而字符串"()(())"是一個標準的括號序列。
給定一個括號序列,你需要對求出:這個括號序列的所有不同的子串中,有多少個是標準的括號序列?
一個括號序列的子串指的是這個序列從某個位置起始、到某個位置截止的子字符串。如果兩個子串擁有不同的起始位置或截止位置,那么它們就被認為是括號序列的不同的子串。
?

?

輸入

包括一行一個字符串,為給定的括號序列。

?

輸出

輸出一個整數,為標準的括號序列的子串的個數。

?

樣例輸入

()(())

樣例輸出

4

?

提示

設輸入字符串的長度為n。
對于30%的數據,滿足n≤200。
對于60%的數據,滿足n≤5000。
對于100%的數據,滿足1≤n≤10^6。

題解:題目要求必須是子串,也就是要連續的,因此當前面有一個合法的話,如果緊接著又出現了一個合法的,那么方法數就是(1+1)種,如果前面有n種連續的合法的括號的話,緊接著又出現一個合法的,那么方法數就是(1+n),所以每當遇到一個合法的括號對的時候,看他前面是否有連續的括號對,用stack記錄,用stack.pre來記錄當以這個括號作為兩個連續合法序列的分隔時,這個括號后面有多少個合法的序列。

?

#include <bits/stdc++.h> #define ll long long #define met(a,x) memset(a,x,sizeof(a)) #define inf 0x3f3f3f3f using namespace std; const int N=1e6+10; const int mod=1e9+7; char a[N]; struct node {int x,pre; } b; stack<node> s; int main() {ios::sync_with_stdio(false);cin.tie(0);cin>>a+1;int len=strlen(a+1);ll ans=0;ll sum=0;for(int i=1; i<=len; i++){if(a[i]=='(')b.x=1;elseb.x=2;if(!s.empty()){if(s.top().x==1&&b.x==2){s.pop();if(s.empty()){ans+=(sum+1);sum++;}else{ans+=(s.top().pre+1);s.top().pre++;}}elses.push(b);}elses.push(b);}cout<<ans<<endl;return 0; }

?

轉載于:https://www.cnblogs.com/nublity/p/10278933.html

創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的括号序列的全部內容,希望文章能夠幫你解決所遇到的問題。

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