由于“对应数字大的那一方得一分并将该张牌从自己手牌移除,另一方不得分,手牌也不变”这一规则意味着本题不能简单地看成是普通“田忌赛马”,并且由于这个规则导致小苯若是将一张比小红所有牌都小的牌放在前列,那张牌将永远不会被消耗,这时小苯无法得到最高分。由此可知小苯想得到最高分只需以小红最小的牌为界,大于的放在前列然后排列组合即可。
附本人ac码:
#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define mod 998244353
const ll N=1e6+10;
ll a[N],b[N];
ll f(ll n)
{
ll res = 1;
for (ll i = 2; i <= n; i++) {
res = res * i % mod;
}
return res;
}
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);
int t;
cin>>t;
while(t--)
{
ll n;
cin>>n;
for(ll i=1;i<=n;i++)
{
cin>>a[i];
}
ll m=1e6;
for(ll i=1;i<=n;i++)
{
cin>>b[i];
m=min(m,b[i]);
}
sort(a+1,a+n+1);
ll s=0;
for(int i=n;i>=0;i--)
{
if(a[i]>m)
{
s++;
}
}
cout<<f(s)%mod*f(n-s)%mod<<endl;
}
return 0;
}

京公网安备 11010502036488号