蒟蒻求助
查看原帖
蒟蒻求助
161748
ssilrrr楼主2022/1/12 23:15

rt,第一次debug1h,发现是少打个std::endl

现在是TLE 70

#include <bits/stdc++.h>
#define int long long
using namespace std;
const int mod=998244353;//
int f[100001],fn[100001];
int inv(int a,int m){
	if(m==0)return 1;
	else{
		if(m%2==0){
			int k=inv(a,m/2)%mod;return k*k%mod;
		}else{
			return a*inv(a,m-1)%mod;
		}
	}
}
int c(int n,int m){
	if(m==0)return 1;else{
		if(m==1)return n;
		else{
			return c(n-1,m-1)%mod*n%mod*inv(m,mod-2)%mod;
		}
	}
}
signed main(){
	int lv;cin>>lv;
	while(lv--){
		int n,m;string s;cin>>n>>m>>s;
		//if(s.size()!=n)s=s.substr(0,n);
		n=m-n;
		if(s.size()==2){
			cout<<inv(2,n)%mod*c(2+n,n)%mod<<endl;continue;
		} 
		int a=0,b=0,aa=0,bb=0;
		for(int i=0;i<s.size();i++){
			if(s[i]=='('&&a>0)break;
			if(s[i]==')')a++;
		}
		for(int i=0;i<s.size();i++){
			if(s[i]=='(')aa++;else break;
		}
		for(int i=s.size()-1;i>=0;i--){
			if(s[i]==')'&&b>0)break;
			if(s[i]=='(')b++;
		}
		for(int i=s.size()-1;i>=0;i--){
			if(s[i]==')')bb++;else break;
		}
		//cout<<a<<aa<<b<<bb<<endl;
			f[0]=1;
			for(int i=1;i<=n;i++){
				if(a==aa) f[i]=(f[i-1]+c(a+i,i))%mod;else f[i]=f[i-1];
			}

			fn[0]=1;
			for(int i=1;i<=n;i++){
				if(b==bb) fn[i]=(fn[i-1]+c(b+i,i))%mod;else fn[i]=fn[i-1];
			}
		int ans=0;
		for(int i=0;i<=n;i++){
			ans=(ans+f[i]*fn[n-i])%mod;
		}cout<<ans<<endl;
	}
} 
2022/1/12 23:15
加载中...