题目链接:https://ac.nowcoder.com/acm/contest/120561/B 思路:本题的意思是小苯要尽量分数多,在这个的基础上,有多少种排列方法(不重排也是一种方法,可能有人会额外考虑不重排,但其实只要求出总的排列方法就行了,用的是高中学习的阶乘) 解法:首先,只要是比小红最小的牌大的牌(称为A),都可以得分,比小红最小的牌小的(B)不管怎么样都不能得分,所以只需要求出A的阶乘*B的阶乘,那么就涉及到排序问题了,我用的是vector数组。

#include <bits/stdc++.h>
#define int long long//不建议,主播是写完之后不知道为啥过不了,发现可能是超过int 了,实在不想改了,其实你可以long long 定义ans
using namespace std;
vector <int>a;
vector <int>b;
signed main() {
	int n,x,t;
	cin>>t;
	int sum,ans;
	for(int i=0; i<t; i++) {
		sum=0;
		ans=1;
		cin>>n;
		for(int j=0; j<n; j++) {
			cin>>x;
			a.push_back(x);
		}
		for(int j=0; j<n; j++) {
			cin>>x;
			b.push_back(x);
		}
		sort(b.begin(),b.end());
		for(int j=0; j<n; j++) {
			if(a[j]>b[0]) {
				sum++;
			}
		}
		for(int j= 1; j <=sum; j++) {
			ans = (ans * j) % 998244353;
		}
		for(int j= 1; j <=n-sum; j++) {
			ans = (ans * j) % 998244353;
		}
		cout<<ans<<'\n';
		a.clear();
		b.clear();
	}

	return 0;
}
}
  

ok,这就是完整代码了,希望对你有帮助