思路:贪心算法
将每个人的宠物战力值分别进行排序,然后用最强打最强,如果打不过就换策略最弱打最弱;如果还是打不过,则用自己的最弱去打对方的最强。以此求得利益最大化。
求最小分数的话,和求最大分数值是一样的,一方分数最高自然对应着对方分数值最低。
#include <bits/stdc++.h>
using namespace std;
const int N=1e5+7;
int n,a[N],b[N];
int fight(int *a,int *b){
int ans=0,al=1,ar=n,bl=1,br=n;
while(al<=ar){
if(a[ar]>b[br]){//最强打最强
ans+=2;//初始分数
ar--,br--;
} else if(a[al]>b[bl]){//最弱打最弱
ans+=2;
al++,bl++;
}else if(a[al]<=b[bl]){//最弱换对方最强
ans+=a[al]==b[br];
al++,br--;
}
}
return ans;
}
int main(){
cin>>n;
for(int i=1;i<=n;i++)
cin>>a[i];
for(int i=1;i<=n;i++)
cin>>b[i];
sort(a+1,a+n+1);
sort(b+1,b+n+1);
cout<<fight(a,b)<<" "<<n*2-fight(b,a);
return 0;
}