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;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】