萌新求助 7,14,18,19报RE
查看原帖
萌新求助 7,14,18,19报RE
310774
peoi楼主2022/7/28 17:29
#include<bits/stdc++.h>
#define ll long long
#define elif else if
using namespace std;
const int mod=998244353;
pair<ll,ll> xgcd(ll a,ll b){//extra gcd
	//pair<ll,ll> p=xgcd(a,b);
	//假设 xa+yb=gcd(a,b)
	//x=p.second
	//y=(p.first-a*p.second)/b
	ll s0=1,s1=0;
	while(b!=0){
		ll q=a/b;
		a-=q*b;
		s0-=q*s1;
		swap(a,b);
		swap(s0,s1);
	}
	return {a,s0};
}
ll len,arr[100005];
int main(){
	ll l=0,r=0,u=0;
	cin>>len;
	if (len&1){
		cout<<0;
		return 0;
	}
	char c=getchar();
	while (!(c=='(' or c==')' or c=='?')){
		c=getchar();
	}
	while (true){
		if (c=='(')
			l++;
		elif (c==')')
			r++;
		elif (c=='?')
			u++;
		else
			break;
		c=getchar();
	}
	arr[0]=1;
	ll m=len/2-l,n=len/2-r,w=n+m;//m=所需左括号数量
	/*
	n个A m个B 排列 (n+m)!/(n!*m!)
	*/
	for (int i=1;i<=w;i++){
		arr[i]=arr[i-1]*i%mod;
	}
	ll x=arr[n+m],y=arr[n]*arr[m],x1=xgcd(y,mod).second;
	cout<<(x*(x1+mod))%mod;
}
2022/7/28 17:29
加载中...