提交时间:2025-11-19 19:18:07
运行 ID: 38925
#include<bits/stdc++.h> #define int long long using namespace std; const int N=2e5+7,mod=998244353; int Fac[N],iFac[N]; inline void Init(){ Fac[0]=iFac[0]=Fac[1]=iFac[1]=1; for(int i=2;i<N;i++)Fac[i]=Fac[i-1]*i%mod; for(int i=2;i<N;i++)iFac[i]=iFac[mod%i]*(mod-mod/i)%mod; for(int i=2;i<N;i++)(iFac[i]*=iFac[i-1])%=mod; } inline int C(int n,int m){ return n<m||m<0?0:Fac[n]*iFac[m]%mod*iFac[n-m]%mod; } int n; char s[N]; inline int R(int x,int y){ return (C(x+y,x)+mod-C(x+y,x-1))%mod; } signed main(){ #ifndef ONLINE_JUDGE freopen("bracket.in","r",stdin); freopen("bracket.out","w",stdout); #endif cin>>n; for(int i=1;i<=n;i++)cin>>s[i]; Init(); int S=0; int Ans=0; for(int i=1;i<=n;i++){ // cout<<s[i]<<endl; if(s[i]==')'){ int D=S+1,P=n-i; // cout<<i<<" "<<R((P-D)/2,(P+D)/2)<<endl; (Ans+=R((P-D)/2,(P+D)/2))%=mod; }S+=(s[i]=='('?1:-1); } cout<<(Ans+1)%mod<<endl; return 0; }