思路:
需要在a[i]>b[j]的情况下,使a[i]尽可能大,而b[j]尽可能小。贪心策略为用当前剩下的枪去打最弱的怪物,以便让每一枪都能获得当前情况下最大的奖金。
注意:
刚开始wrong answer了,后来发现数据类型longlong
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
bool cmp(long long a,long long b){ //从大到小拍
return a>b;
}
long long a[100005];
long long b[100005];
int main(){
int t;
cin>>t;
while(t--){
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
int n,m;
// cin>>n>>m;
scanf("%d%d",&n,&m);
for(int i=0;i<n;i++){
// cin>>a[i];
scanf("%lld",&a[i]);
}
for(int i=0;i<m;i++){
// cin>>b[i];
scanf("%lld",&b[i]);
}
sort(a,a+n,cmp); //从大到小排序
sort(b,b+m); //从小到大排序
int x=min(m,n);
long long sum=0;
for(int i=0;i<x;i++){
if(a[i]>=b[i]){
sum+=a[i]-b[i];
}
else{
break;
}
}
// cout<<sum<<endl;
printf("%lld\n",sum);
}
return 0;
}