#include<iostream>
#include<vector>
using namespace std;
using ll = long long;
void solve(){
int n;
cin >> n;
vector<int> a(n);
vector<int> b(n);
for(int i = 0; i < n; i ++) cin >> a[i];
for(int i = 0; i < n; i ++) cin >> b[i];
ll min_b = 2 * n, count_max = 0, count_min = 0;
for(int i = 0; i < n; i ++){
if(b[i] < min_b) min_b = b[i];
}
for(int i = 0; i < n; i ++){
if(a[i] > min_b) count_max++;
else count_min++;
}
// ll result = 1; //result_max = 1, result_min = 1;
// for(int i = 1; i <= count_max; i ++)
// result = (result * i) % 998244353;
// for(int i = 1; i <= count_min; i ++)
// result = (result * i) % 998244353;
// // result = (result_max * result_min) % 998244353;
// //cout << min_b << " " << count_max << " " << count_min << " " << endl;
// // result = result % 998244353; 有没有都可以
// cout << result << endl;
ll result = 1, result_max = 1, result_min = 1;
for(int i = 1; i <= count_max; i ++)
result_max = (result_max * i) % 998244353;
for(int i = 1; i <= count_min; i ++)
result_min = (result_min * i) % 998244353;
result = (result_min * result_max) % 998244353;
cout << result << endl;
}
int main(){
int t;
cin >> t;
while(t --){
solve();
}
}
每一次没有出去的牌会进行下一次的比较,也就是说如果小苯的一张小牌在前的话,那么有可能会挡住所有的其他大牌,所以理论上讲,小苯得分最多的情况就是将所有的大于小红最小的牌的牌全部打出,也就是以小红的最小的牌为界,小苯大于此牌的牌在前面,其他的牌在后面,就是m! * n!再取模。

京公网安备 11010502036488号