A46133 最优写法
2026-08-10 08:59:49
发布于:江苏
16阅读
0回复
0点赞
首先,我们可以考虑,如果我们最小的可以赢下敌人最小的,那么我们就可以让最小的获胜,数组就等价于从第二小的到最大的进行田忌赛马,如果赢不了,那么我们就可以去看一下最大的(因为你连最小的都无法战胜,那看一下可不可以帮一下自己家的最强者),如果最大的比对方的强(不需要帮忙),就把最小的先晾着,让最大的获胜,如果需要帮忙,那么就让他帮忙。
#include<bits/stdc++.h>
#include <cstdio>
using namespace std;
int a[50006],b[50006];
int main(){
int n;
scanf("%d",&n);
for(int i=1;i<=n;i++){
scanf("%d",&a[i]);
}
for(int i=1;i<=n;i++){
scanf("%d",&b[i]);
}
sort(a+1,a+n+1);
sort(b+1,b+n+1);
int my_w=1,my_s=n,em_w=1,em_s=n;
int ans=0;
for(int i=1;i<=n;i++){
if(a[my_w]>b[em_w]){
my_w++;
em_w++;
ans++;
}
else if(a[my_s]>b[em_s]){
em_s--;
my_s--;
ans++;
}
else{
my_w++;
em_s--;
}
}
printf("%d",ans);
}
这里空空如也



有帮助,赞一个