注释写得很详细,直接看。
2026-08-26 23:15:27
发布于:广东
9阅读
0回复
0点赞
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
int main(){
while(1){ // 死循环,处理多组测试数据
ll n,a[1010]{},b[1010]{}; // n为马的数量,a为田忌的马速,b为齐王的马速,{}表示初始化为0
cin >> n;
if(n==0){ // 当n为0时,结束输入,退出循环
break;
}
for(ll i=1;i<=n;i++){
cin >> a[i]; // 读入田忌的马的速度
}
for(ll i=1;i<=n;i++){
cin >> b[i]; // 读入齐王的马的速度
}
sort(a+1,a+n+1,greater<ll>()); // 田忌的马按速度从大到小排序
sort(b+1,b+n+1,greater<ll>()); // 齐王的马按速度从大到小排序
ll ans=0; // 记录田忌的最终金币收益(赢+200,输-200,平+0)
for(ll i=1;i<=n;i++){ // 遍历田忌的每一匹马(当前为田忌的最强可用马)
bool p = false; // 标记当前田忌的马是否已匹配对手
for(ll j=1;j<=n;j++){ // 遍历齐王的每一匹马
if(!p&&a[i]>b[j]&&b[j]!=-1){ // 如果未匹配,且田忌马速>齐王马速,且齐王马未被用过(b[j]!=-1)
ans+=200; // 赢一场,加200金币
p = true; // 标记已匹配
b[j] = -1; // 将齐王的这匹马标记为已使用
}
}
if(!p){ // 如果田忌的这匹马赢不了任何剩下的马
for(ll j=1;j<=n;j++){ // 尝试找一匹速度相同的马打平
if(b[j]==a[i]&&!p){ // 如果齐王有马速度相同且未匹配
b[j] = -1; // 标记齐王的马已使用
p = true; // 标记已匹配(平局不加减金币)
}
}
}
if(!p){ // 如果既不能赢,也不能平
for(ll j=1;j<=n;j++){ // 只能输,用田忌的马去消耗齐王剩下的马
if(b[j]!=-1&&!p){ // 找到齐王第一匹还没被用过的马
b[j] = -1; // 标记齐王的马已使用
ans-=200; // 输一场,扣200金币
p = true; // 标记已匹配
}
}
}
}
cout << ans << '\n'; // 输出当前这组数据的最终结果
}
return 0;
}
这里空空如也







有帮助,赞一个