- 贪心算法,各种情况下都是对自己为有利。
- 其他技巧看注释。
#include <bits/stdc++.h>
using namespace std;
//函数只能在外部定义
bool cmp(int i, int j){
return i>j;
}
int main(){
int n;
long ans = 0;
cin>>n;
int a[100015],b[100015];//技巧,申请一个非常大得数组。
for(int i = 1;i <= n;i++) cin>>a[i];//技巧。从一开始,第一个代表第一个小球
for(int i = 1;i <= n;i++) cin>>b[i];
//从大到小排序
sort(a+1,a+1+n,cmp);//为什么要排序,因为贪心
sort(b+1,b+1+n,cmp);//注意这个比较值得是比较元素得下标,额可以部分比较哦
int i = 1;
int j = 1;
// 谁的堆拿完谁获胜
while(i<=n||j<=n){//因为数组已经排序贪心过了
if(a[i]>b[j]) ans+= a[i++];//那下一个求
else j++; //贪心,否则就把b的第一个给扔掉
//然后对方
if(a[i]<b[j]) ans -= b[j++];
else i++;
}
cout<<ans<<endl;
return 0;
}