题目 alt *注意,题目要求是小苯得分尽可能高,没有要求小苯赢,所以只有考虑小苯得分,不需要考虑小红得分;

*注意,大的一方手牌移除,小的一方手牌保留;

alt

alt

主要思路

题目要求小苯得分尽可能高,即小苯的牌要尽可能的出完。显然大牌容易出,小牌不容易。

那么多大的牌算大牌呢?

答案是:比小红最小的牌大的,都是大牌,其余是小牌。

例如:

小苯: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哦。