本题的关键在于b中的最小值b_min。为了让a得到尽可能高的分数,应将b_min排在第一位,此时对于a中的牌来说,大于b_min则可得一分,小于b_min则不能得分。所以对于a来说可分为两段:大于b_min和小于b_min。那么组合个数就是这两段的阶乘之积。 下面是代码:

#include<bits/stdc++.h>
#define int long long
int a[200005],b[200005];
using namespace std;
signed main(){
	int T;
	cin>>T;
	while(T--){
		int n,mn=2e9,x=0,y=0;
		cin>>n;
		for(int i=1;i<=n;i++){
			cin>>a[i];
		}
		for(int i=1;i<=n;i++){
			cin>>b[i];
			mn=min(mn,b[i]);
		}
		for(int i=1;i<=n;i++){
			if(a[i]>mn)x++;
			else y++;
		}
		int ans=1;
		for(int i=1;i<=x;i++){
			ans=(ans*i)%998244353;
		}
		for(int i=1;i<=y;i++){
			ans=(ans*i)%998244353;
		}
		cout<<ans<<endl;
	}
}