题解 | #B-Card Game#

Card Game

https://ac.nowcoder.com/acm/contest/120561/B

题意:小苯和小红各有 n 张牌(共 2n 张),游戏规则: 两人每次出最前一张牌,数字大的一方得 1 分并将这张牌移除,对方牌不变; 若一方无牌则游戏结束。

题目让小苯的分尽量大,翻译一下就是小苯要从大到小出牌,把最大牌早出就不会被卡,不用管小红的牌,举几个例子就可以看出在从大到小排的方式下,有多个下于红最小的牌就是最后被卡住的牌数x,最高的得分就是大于红最小牌的个数y,排序数就是x!*y!

using namespace std;
//#define int long long
#define endl '\n'
const long long MOD=998244353;
long long as(long long num)
{
    long long z=1;
    for(long long i=num;i>=1;i--)
    {
        z*=i;
        z%=MOD;//不加会溢出
    }
    return z;
}
signed main()
{
    ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
    long long t;
    cin>>t;
    for(long long i=0;i<t;i++)
    {
        long long n;
        cin>>n;
        vector<long long> a(n);
        vector<long long> b(n);
        for(long long j=0;j<n;j++)
        {
            cin>>a[j];
        }
        for(long long j=0;j<n;j++)
        {
            cin>>b[j];
        }
        //sort(a.begin(),a.end(),greater<long long>());
        sort(b.begin(),b.end());//算出红最低的牌
        long long sum=0;
        for(long long j=0;j<n;j++)
        {
            if(a[j]>b[0])
            {
                sum++;
            }
        }
        long long mm=(as(sum)%MOD*as(n-sum)%MOD)%MOD;
        cout<<mm<<endl;
    }
    return 0;
}
全部评论

相关推荐

02-14 12:40
门头沟学院 Java
程序员花海:1.面试要求必须Java笔试不一定 2.难度对等秋招 远超于日常实习是因为同一批次且转正很多 竞争压力大 3.第一个加点指标,上线了就把接口性能加上去 使用本地缓存这个不算亮点 只是技术选型,要把为什么采用这个和背后的思考写出来而不是单纯堆叠技术没意义 4.八股要一直看 很容易忘记 5.拼团交易这个老问题 堆积技术 另外建议你把奖项合并到教育背景 没必要拆出来放最后
我的简历长这样
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务