题解 【SR3-T1】【永远与须臾的走廊】
题解
首先给出结论:方案合法,当且仅当左括号数目和右括号数目相等。
考虑非常套路地,将左括号记为
这张图对应的
这张图对应的
现在假设有
因此可以解出,
参考代码
#include<bits/stdc++.h>
#define up(l,r,i) for(int i=l,END##i=r;i<=END##i;++i)
#define dn(r,l,i) for(int i=r,END##i=l;i>=END##i;--i)
using namespace std;
typedef long long i64;
const int INF =2147483647;
const int MAXN=1e5+3;
const int MOD =998244353;
int n,a,b,c; char S[MAXN];
int pwr(int x,int y){
int r=1; while(y){
if(y&1) r=1ll*r*x%MOD; x=1ll*x*x%MOD,y>>=1;
}
return r;
}
int chs(int x,int y){
if(y<0||y>x) return 0;
int r=1,s=1,t=1; up(1,x,i){
r=1ll*r*i%MOD; if(i==y) s=r; if(i==x-y) t=r;
}
return 1ll*r*pwr(s,MOD-2)%MOD*pwr(t,MOD-2)%MOD;
}
int main(){
scanf("%d%s",&n,S+1);
up(1,n,i) switch(S[i]){
case '(': ++a; break;
case ')': ++b; break;
case '?': ++c; break;
}
printf("%d\n",n%2==0?chs(c,(c+b-a)/2):0);
return 0;
}