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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

Almost Regular Bracket Sequence

發布時間:2024/10/5 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Almost Regular Bracket Sequence 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

https://codeforces.com/contest/1095/problem/E

C++版本一

題解:服了,WA了十幾次,一邊WA一邊改

首先準備兩個數組一個正向存儲括號情況,一個反向存儲括號情況。

記錄異常開始時的下標(就是這里卡了)一個正向,一個反向的。

開始找可以改變的點應該從反向的異常開始點開始,這樣才能改變反向異常的情況。同理到正向異常的開始點就應該結束了,因為,繼續進行下去,不能改變正向異常的情況。

中間還有一些特判處理,比如異常的不可能大于某些值(正負2)

如果n為奇數不用辨別了,直接0

上面兩個數組中正向數組最后一個和反向數組的第一個的絕對值肯定是2;否則,直接0處理就行了;

?

/* *@Author: STZG *@Language: C++ */ #include <bits/stdc++.h> #include<iostream> #include<algorithm> #include<cstdlib> #include<cstring> #include<cstdio> #include<string> #include<vector> #include<bitset> #include<queue> #include<deque> #include<stack> #include<cmath> #include<list> #include<map> #include<set> //#define DEBUG #define RI register int using namespace std; typedef long long ll; //typedef __int128 lll; const int N=1000000+1000; const int MOD=1e9+7; const double PI = acos(-1.0); const double EXP = 1E-8; const int INF = 0x3f3f3f3f; int t,n,m,k,q; char str[N]; int a[N]; int b[N]; int main() { #ifdef DEBUGfreopen("input.in", "r", stdin);//freopen("output.out", "w", stdout); #endifscanf("%d",&n);scanf("%s",str);if(n%2){cout << 0 << endl;return 0;}for(int i=0;i<n;i++){if(i)a[i]=a[i-1];if(str[i]=='(')a[i]++;elsea[i]--;if(a[i]<-2){cout << 0 << endl;return 0;}}int flag=0;for(int i=n-1;i>=0;i--){b[i]=b[i+1];if(str[i]=='(')b[i]++;elseb[i]--;if(b[i]>0&&!flag){flag=i;}if(b[i]>2){cout << 0 << endl;return 0;}}if(abs(b[0])!=2){cout << 0 << endl;return 0;}int ans=0;for(int i=flag;i<n;i++){if(i!=0&&str[i]=='('){if(a[i]-2+b[i+1]==0&&a[i]-2>=0&&b[i]-2<=0)ans++;}else if(i!=n-1&&str[i]==')'){if(a[i]+2+b[i+1]==0&&a[i]+2>=0&&b[i]+2<=0)ans++;}if(a[i]<0){break;}}cout<<ans<<endl;//cout << "Hello world!" << endl;return 0; }

C++版本二

某位大佬的AC代碼

#include<bits/stdc++.h> using namespace std; #define Fopen freopen("_in.txt","r",stdin); freopen("_out.txt","w",stdout); #define LL long long #define ULL unsigned LL #define fi first #define se second #define pb push_back #define lson l,m,rt<<1 #define rson m+1,r,rt<<1|1 #define lch(x) tr[x].son[0] #define rch(x) tr[x].son[1] #define max3(a,b,c) max(a,max(b,c)) #define min3(a,b,c) min(a,min(b,c)) typedef pair<int,int> pll; const int inf = 0x3f3f3f3f; const int _inf = 0xc0c0c0c0; const LL INF = 0x3f3f3f3f3f3f3f3f; const LL _INF = 0xc0c0c0c0c0c0c0c0; const LL mod = (int)1e9+7; const int N = 1e6 + 100; char s[N]; int need[N]; int n; int ans; void solve1(){int l = 0;for(int i = 1; i <= n; ++i){need[i] = 0;if(s[i] == '(') l++;if(s[i] == ')') {if(!l) return ;l--;need[i] = l;}need[i] = l;}if(l != 2) return ;for(int i = n; i >= 1; --i){if(s[i] == ')' && need[i] < 2) return ;if(need[i]>1 && s[i] == '(') ans++;}//cout << "fuck" << endl; } int main(){scanf("%d", &n);scanf("%s", s+1);solve1();reverse(s+1, s+1+n);for(int i = 1; i <= n; ++i) {if(s[i] == '(') s[i] = ')';else s[i] = '(';}solve1();//for(int i =)printf("%d\n", ans);return 0; } /* 6 (()))) 8*/

C++版本三

還是某位大佬的代碼

#include <cstdio> #include <cstdlib> #include <cstring> #include <bitset> #include <cmath> #include <cctype> #include <iostream> #include <algorithm> #include <string> #include <vector> #include <queue> #include <map> #include <set> #include <sstream> #include <iomanip> using namespace std; typedef long long ll; typedef unsigned long long ull; const ll inff = 0x3f3f3f3f3f3f3f3f; #define FOR(i,a,b) for(int i(a);i<=(b);++i) #define FOL(i,a,b) for(int i(a);i>=(b);--i) #define REW(a,b) memset(a,b,sizeof(a)) #define inf int(0x3f3f3f3f) #define si(a) scanf("%d",&a) #define sl(a) scanf("%lld",&a) #define sd(a) scanf("%lf",&a) #define ss(a) scanf("%s",a) #define mod ll(6666666) #define pb push_back #define eps 1e-6 #define lc d<<1 #define rc d<<1|1 #define Pll pair<ll,ll> #define P pair<int,int> #define pi acos(-1) int n,b[1000008],c[1000008],d[1000008]; string a; int main() {cin.tie(0);cout.tie(0);int s=0,l=0,r=0,is=0,er=0;cin>>n>>a;FOR(i,0,n-1){if(a[i]=='(') l++;if(a[i]==')') r++;b[i]=l,c[i]=r;if(r>l&&!is) is=1,s=r,a[i]='(';}if(!is){FOL(i,n-1,0){if(b[i]-c[i]<2) {a[i+1]=')';break;}else if(a[i]=='(')s++;}}l=r=is=0;FOR(i,0,n-1){if(a[i]=='(') l++;if(a[i]==')') r++;if(r>l) {is=1;break;}}if(is||s>n||l!=r) s=0;cout<<s<<endl;return 0; }

?

總結

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

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