CF777B 1300 *

题意

有两个人S和M,他们每人有一段长度为N的数字,两个人在每一轮游戏中都可以按顺序拿出一个数字,谁的数字小谁就接受一次惩罚。若相等两者都没有惩罚。另外,M珂以重新安排自己数字的顺序,问 M的最少被惩罚次数 和 S的最多被惩罚次数 是多少。1<=n <= 1000。

解析

都从最小的比较,如果M可以赢,那就出这张牌,因为这已经是M最小的牌了,不亏
如果M不能赢,就留到最后出给S最大的牌

代码

#include<bits/stdc++.h>
using namespace std;
const int N = 1e3 + 10;
int a[N],b[N];
int n;
int main(){
    scanf("%d",&n);
    for(int i=1;i<=n;i++)
        scanf("%1d",&a[i]);
    for(int i=1;i<=n;i++)
        scanf("%1d",&b[i]);
    sort(a+1,a+1+n);
    sort(b+1,b+1+n);
    //m 不输的次数最多
    int j = 1,res1 = 0,res2 = 0;
    for(int i=1;i<=n;i++){
        if(b[i] >= a[j]){
            j ++;
            res1 ++;
        }
    } 
    j = 1;//m赢的次数最多
    for(int i=1;i<=n;i++){
        if(b[i] > a[j]){
            j ++;
            res2 ++;
        }
    }
    cout << n - res1 << endl << res2;
    return 0;
}
posted @   Isaac233  阅读(10)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
点击右上角即可分享
微信分享提示