题目
*注意,题目要求是小苯得分尽可能高,没有要求小苯赢,所以只有考虑小苯得分,不需要考虑小红得分;
*注意,大的一方手牌移除,小的一方手牌保留;
主要思路:
题目要求小苯得分尽可能高,即小苯的牌要尽可能的出完。显然大牌容易出,小牌不容易。
那么多大的牌算大牌呢?
答案是:比小红最小的牌大的,都是大牌,其余是小牌。
例如:
小苯:1 8 7 2
小红:3 6 4 5
观察发现3是最小,那么1和2是小牌,8和7是大牌。
因为8,7比3大,所以8和7是能出掉,而1,2比3小,那它们无论怎样都出不了。
而7和8只要在1,2前就一定能出,7和8相对位置无影响,直接全排列,(1,2相对位置也无关),如此得分最高。
所以小苯的最高得分是二,有2!乘以2!(全排列)种可能。
代码如下
using namespace std;
#define mo 998244353
int main(){
int n,t;
cin>>t;
int a[200005]={0};
while(t--){
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i];
}
int b_xiao=500000;
int num;
for(int i=1;i<=n;i++){
cin>>num;
b_xiao=min(b_xiao,num);
}
int a_da=0;
int a_xiao=0;
for(int i=1;i<=n;i++){
if(a[i]<b_xiao)
a_xiao++;
else a_da++;
}
long long ans=1; //阶乘
for(int i=1;i<=a_xiao;i++){
ans=ans*i%mo;
}
for(int i=1;i<=a_da;i++){
ans=ans*i%mo;
}
cout<<ans<<endl;
}
}
记得开long long哦。

京公网安备 11010502036488号