B_cardgame题解

解题思路

这条题目很有意思,我一开始以为是田忌赛马类型的题目,也就是小红小明不管输赢都要进行弃牌的这样一个操作,结果wa了10次,后面跟实验室学长沟通才发现,原来只有赢的人要弃牌。在经过我的钛合金大脑思考过后(实则为无数次穷举)我发现了这个规则后面一个不合理的点,我只要把最小的牌放前面,不管后面有没有大牌,都走不掉(也就是无法得到point)而只要我把比小红最小的牌大的牌放在比小红最小牌小的牌的前面,我比他大的牌不管怎么样排都能走掉,而找到有多少张比小红最小的牌大的牌就是这条题目的解题关键。

用到方法

这条题目实则用到了sort排序和vector数组以及最重要的取模的意识,在阶乘阶段就要进行取模,否则在最后取模会职业45%的通过率(不要问我为什么知道) #示例代码

using namespace std;

int main(){
    int t;
    cin>>t;
    while(t--){
        int n;
        cin>>n;
        vector<int>xh(n);
        vector<int>xb(n);
        for(int i=0;i<n;++i){
cin>>xb[i];
        }
        for(int i=0;i<n;++i){
            cin>>xh[i];
        }
        sort(xh.begin(),xh.end());
        sort(xb.begin(),xb.end());
        int cnt=0;
        for(int i=0;i<n;++i){
            if(xb[i]>=xh[0]){
                break;
            }
            else{
                cnt++;
            }
        }
            int num=n-cnt;
            long long a=1,b=1,ans;
            for(int i=cnt;i>0;--i){
                a*=i;
                a=a%998244353;
            }
            for(int i=num;i>0;--i){
                b*=i;
                b=b%998244353;
            }
            ans=a%998244353*b%998244353;
        cout<<ans<<endl;
    }
    return 0;
}
全部评论

相关推荐

评论
3
收藏
分享

创作者周榜

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