题目链接: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,这就是完整代码了,希望对你有帮助

京公网安备 11010502036488号